如何在JDBC网址中访问`classpath:`的父级?

时间:2019-01-23 03:26:21

标签: java mysql spring jdbc

运行测试时,我使用h2数据库,并且在src/main/test/db/init.sql上有一个init.sql。

如果我这样使用JDBC URL:spring.datasource.druid.url=jdbc:h2:mem:s;MODE=MYSQL;INIT=RUNSCRIPT FROM 'classpath:/db/init.sql',程序将在以下位置查找它 src/main/test/db/resources/db/init.sql,这不是init.sql所在的位置。

如果我这样指定:spring.datasource.druid.url=jdbc:h2:mem:s;MODE=MYSQL;INIT=RUNSCRIPT FROM 'classpath:/../db/init.sql',它将显示一些错误,表明找不到文件。

问题是,我应该指定哪个URL来使JDBC在src/main/test/db/init.sql中查找init.sql?

1 个答案:

答案 0 :(得分:1)

运行测试时,在资源文件夹中搜索init.sql文件,因为by default for maven projects在运行测试时,/src/test/resources目录的内容位于{{ 1}}。因此,当您像在问题中那样,在CLASSPATH属性中将类路径指定为环境变量时,将在spring.datasource.druid.url目录之前。

要回答您的问题,要确保可以使用您指定的属性/src/test/resources/找到init.sql文件,您需要通过修改spring.datasource.druid.url=jdbc:h2:mem:s;MODE=MYSQL;INIT=RUNSCRIPT FROM 'classpath:/db/init.sql'来更改默认的Maven资源文件夹构建代码如下:

pom.xml

我建议最佳实践,您宁可将<build> <resources> <resource> <directory>src/main/resources</directory> </resource> <resource> <directory>src/test</directory> </resource> </resources> </build> 文件移动到init.sql文件夹并使用应该起作用的属性src/test/resources