java - 如何在 JDBC url 中访问 `classpath:` 的父级?

标签 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?

最佳答案

运行测试时,会在资源文件夹中搜索 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/

相关文章:

java - "i want certain columns in entity class to not to create columns in table,is there any solution or annotation for that"

java - 在 tomcat 5.5 中部署时出错

java - 什么时候可以抛出 NoSuchResult

Java日期格式模式

mysql - mysql中每组前N个Sql问题

java - 我如何在 JDBC 中使用 WHERE EXISTS 函数

java - 无法从 mongodb java 驱动程序连接到 MLab Mongo 数据库

java - 如何理解Serialized接口(interface)?

java - 如何使用三个变量检查​​两个构造函数是否彼此相等?

php - 可以在类中获取数据但是返回时它只发送 bool 值 php PDO?