【问题标题】:How to access parent of `classpath:` in JDBC url?如何在 JDBC url 中访问 `classpath:` 的父级?
【发布时间】:2019-06-16 14:13:08
【问题描述】:

运行测试时,我使用 h2 数据库,并且有一个 init.sql 位于 src/main/test/db/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?

【问题讨论】:

  • 你有没有试过这个:spring.datasource.druid.url=jdbc:h2:mem:s;MODE=MYSQL;INIT=RUNSCRIPT FROM 'classpath:src/main/test/db/init.sql'

标签: java mysql spring jdbc


【解决方案1】:

运行测试时,会在资源文件夹中搜索init.sql 文件,因为by default for maven projects 运行测试时,/src/test/resources 目录内容放在CLASSPATH 的根目录中。因此,当您在问题中将类路径指定为 spring.datasource.druid.url 属性中的环境变量时,/src/test/resources/ 目录将被添加。

为了回答您的问题,为确保可以使用您指定的属性spring.datasource.druid.url=jdbc:h2:mem:s;MODE=MYSQL;INIT=RUNSCRIPT FROM 'classpath:/db/init.sql' 找到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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多