hibernate INIT=RUNSCRIPT和相对路径的问题

eoigrqb6  于 2022-11-14  发布在  其他
关注(0)|答案(3)|浏览(154)

我对源路径(src/main src/test)使用maven约定,并将我的SQL脚本放在src/main/resource/脚本中。
我想使用H2内存运行我的应用程序,并且我想使用JDBC url来初始化我的数据库:

database.url=jdbc:h2:mem:;INIT=RUNSCRIPT FROM 'src/main/resources/scripts/create.sql';

我的问题是这个相对路径(src/main/...)不起作用,并且如果init=runscript命令不针对任何对象,那么h2不会崩溃。
有人知道我应该走哪条路才能让这件事奏效吗?
谢谢

kninwzqo

kninwzqo1#

您可以使用以下URL:
"jdbc:h2:mem:sample;INIT=RUNSCRIPT FROM 'classpath:scripts/create.sql'"
有了它,就可以从类路径运行脚本。因此,您只需将其放入maven(或其他项目)中的src/main/resource/脚本或src/测试/资源/脚本即可。

5m1hhzi4

5m1hhzi42#

对于初学者,我建议尝试使用绝对路径,只是为了检查一切正常。之后,检查您的类路径。例如,bin/main/resources/scripts/create.sql,假设bin是编译类的位置,并且在类路径上。
因为您的源代码所在的src通常不在类路径上,所以这可能是问题的根源。

nwlls2ji

nwlls2ji3#

对于我来说,如果我将脚本放在src/test/resources下,它就会起作用:

database.url=jdbc:h2:mem:;INIT=RUNSCRIPT FROM 'src/test/resources/create.sql';

无论如何,在JUnit上下文中,如果使用src/test/resources下的常规文件路径schema.sql(用于DDL)和data.sql(用于DDL),则不需要在连接字符串中使用INIT变量指定脚本。您可以简单地使用:

database.url=jdbc:h2:mem:testdb

当在内存中创建H2示例时,JUnit将自动运行脚本。

相关问题