运行测试时,我使用的是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?
最佳答案
运行测试时,会在资源文件夹中搜索 init.sql
文件,因为 by default for maven projects运行测试时,/src/test/resources
目录内容位于 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'
,您需要通过修改 pom.xml
构建标记来更改默认的 Maven 资源文件夹,如下所示:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/test</directory>
</resource>
</resources>
</build>
我建议最佳实践,您宁愿将 init.sql
文件移动到 src/test/resources
文件夹并使用属性 spring.datasource .druid.url=jdbc:h2:mem:s;MODE=MYSQL;INIT=RUNSCRIPT FROM 'classpath:init.sql'
应该可以工作。
关于java - 如何在 JDBC url 中访问 `classpath:` 的父级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54319604/