我对源路径(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不会崩溃。
有人知道我应该走哪条路才能让这件事奏效吗?
谢谢
3条答案
按热度按时间kninwzqo1#
您可以使用以下URL:
"jdbc:h2:mem:sample;INIT=RUNSCRIPT FROM 'classpath:scripts/create.sql'"
有了它,就可以从类路径运行脚本。因此,您只需将其放入maven(或其他项目)中的src/main/resource/脚本或src/测试/资源/脚本即可。
5m1hhzi42#
对于初学者,我建议尝试使用绝对路径,只是为了检查一切正常。之后,检查您的类路径。例如,
bin/main/resources/scripts/create.sql
,假设bin
是编译类的位置,并且在类路径上。因为您的源代码所在的
src
通常不在类路径上,所以这可能是问题的根源。nwlls2ji3#
对于我来说,如果我将脚本放在
src/test/resources
下,它就会起作用:无论如何,在JUnit上下文中,如果使用
src/test/resources
下的常规文件路径schema.sql
(用于DDL)和data.sql
(用于DDL),则不需要在连接字符串中使用INIT变量指定脚本。您可以简单地使用:当在内存中创建H2示例时,JUnit将自动运行脚本。