使用gradle-flyway插件创建测试数据库后,如何引用在c3p0 config中创建的db?

时间:2014-12-24 20:41:53

标签: gradle h2 c3p0 flyway

我试图完成以下

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

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

2)我的目标是针对在步骤1中创建的此db编写集成测试。我使用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 @。因此,当我执行&#34; gradle build&#34;时,为c3p0正确配置了数据库jdbcUrl。但是当我通过intelliJ运行测试时,它仍然会读取jdbcUrl,其值包含&#34; @buildDir @&#34;因为intellij在运行测试之前没有运行processTestResources任务。

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

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:0)

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

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