【问题标题】:After using gradle-flyway plugin to create test database, how to reference db created in c3p0 config?使用gradle-flyway插件创建测试数据库后,如何引用c3p0 config中创建的db?
【发布时间】:2015-02-22 20:55:47
【问题描述】:

我试图完成以下工作

1) 在测试运行前使用 gradle-flyway 插件创建 h2 数据库。我能够创建它并将其放在 ${buildDir}

flyway {
    url  = "jdbc:h2:file:${buildDir}/db/test/xxxdb"
    user = 'root'
    locations = [
            'classpath:sql'
    ]
}

2) 我的目标是针对步骤 1 中创建的这个数据库编写集成测试。我使用 c3p0 进行池化,这是我的配置。

<?xml version="1.0"?>
<c3p0-config>
    <default-config>
        <property name="driverClass">org.h2.Driver</property>
        **<property name="jdbcUrl">jdbc:h2:file:@buildDir@/db/test/xxxdb</property>**
        <property name="user">xxx</property>
        <property name="password">xxx</property>
        <property name="minPoolSize">1</property>
        <property name="maxPoolSize">50</property>
        <property name="acquireIncrement">1</property>
    </default-config>
</c3p0-config>

问题:

a) 如何配置 c3p0 以引用在步骤 1 中创建的构建目录中存在的 h2 数据库。c3p0 需要 jdbcUrl 属性中的绝对路径。

b) 我使用下面的 gradle 任务配置了 gradle 以将 @buildDir@ 替换为适当的值。因此,当我执行“gradle build”时,数据库jdbcUrl 已为 c3p0 正确配置。但是当我通过 intelliJ 运行测试时,它仍然会读取值包含“@buildDir@”的jdbcUrl,因为 intellij 在运行测试之前不会运行processTestResources 任务。

processTestResources {
    filter(ReplaceTokens, tokens: [buildDir: buildDir.getAbsolutePath()])
}

关于如何解决这个问题的任何想法?

【问题讨论】:

  • 您应该能够使用相对路径。从 IntelliJ 运行时,工作目录应该是您的项目目录。在 Gradle 中,它也将是项目目录,但在多项目构建的情况下,它将是当前项目的目录。
  • 马克,知道如何为多项目构建解决这个问题吗?正如您所说,intellij 是相对于项目目录查找的,但 gradle 是从当前项目的目录中查找的。​​span>
  • 或者,您可以通过 system property 设置 jdbcUrl 属性,该属性可以在 IntelliJ JUnit run configuration 的 VM 选项中进行配置。

标签: gradle h2 c3p0 flyway


【解决方案1】:

感谢 Mark 的 cmets。对于相对路径,这是我以前使用的语法,现在它适用于 gradle 和 intellij。

jdbc:h2:file:./db/test/xxxdb

【讨论】:

    猜你喜欢
    • 2013-11-16
    • 2015-04-04
    • 2020-12-25
    • 2021-10-12
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    相关资源
    最近更新 更多