代码之家  ›  专栏  ›  技术社区  ›  guo

如何访问JDBC url中'classpath:'的父级?

  •  1
  • guo  · 技术社区  · 5 年前

    在运行测试时,我使用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 ,这不是初始化的内容。sql定位。

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

    问题是,我应该指定什么url来让JDBC查找init。sql输入 src/main/test/db/init。sql ?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Tatenda Zifudzi    5 年前

    运行测试时 init.sql 在资源文件夹中搜索文件,因为 by default for maven projects 运行测试时 /src/test/resources 目录内容放置在 CLASSPATH . 因此,当您在 spring.datasource.druid.url 如您所问的 /src/test/resources/ 目录已前置。

    回答您的问题,确保 初始化。sql 可以使用指定的属性找到文件 spring.datasource.druid.url=jdbc:h2:mem:s;MODE=MYSQL;INIT=RUNSCRIPT FROM 'classpath:/db/init.sql' ,您需要通过修改 pom.xml 生成标记如下:

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
            <resource>
                <directory>src/test</directory>
            </resource>
        </resources>
    </build>
    

    我建议最好的做法是 初始化。sql 文件发送到 src/test/resources 文件夹并使用属性 spring.datasource.druid.url=jdbc:h2:mem:s;MODE=MYSQL;INIT=RUNSCRIPT FROM 'classpath:init.sql' 这应该管用。