我试图完成以下
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()])
}
有关如何解决此问题的任何想法?
答案 0 :(得分:0)
感谢Mark的评论。对于相对路径,这是我使用的语法,现在它适用于gradle和intellij。
jdbc:h2:file:./db/test/xxxdb