我正在尝试在春季使用数据访问层运行集成测试,但是为此,我需要连接到数据库才能运行应用程序bean进行测试。我的一些测试涉及使用数据库持久数据,因此这就是为什么我选择testContainers使用docker运行我的数据库测试的原因。这里的问题是我已经拥有一个自己的sql映像,其中包含我需要测试的填充条目,并且我不想从头开始创建一个空数据库进行测试,我想使用自己的映像进行测试。但我不知道如何从docker映像为春季引导配置数据源,原因是使用通用容器时,我们没有getJDBCUrl()函数或任何可帮助我进行配置的东西。如果我直接使用Mysql映像,我知道配置数据源很容易。但是对于这个,我想使用我的图像。
@ClassRule
val databaseContainer: KGenericContainer = KGenericContainer("myOwnSqlImage:latest")
.withEnv("MYSQL_DATABASE", "databaseNamer")
.withEnv("MYSQL_USER", "root")
.withEnv("MYSQL_ROOT_PASSWORD", "root-password")
答案 0 :(得分:0)
这是一个postgres示例,但我认为您也可以将其重新用于MySQL。
您应该看看System.setProperty("spring.datasource.url", "jdbc:postgresql://${postgres.containerIpAddress}:${postgres.firstMappedPort}/service")
时髦:
static {
def postgres = new GenericContainer("postgres:10").with {
addEnv("POSTGRES_DB", "service")
addEnv("POSTGRES_USERNAME", "postgres")
addEnv("POSTGRES_PASSWORD", "postgres")
withExposedPorts(5432)
}
postgres.start()
System.setProperty("spring.datasource.url", "jdbc:postgresql://${postgres.containerIpAddress}:${postgres.firstMappedPort}/service")
}
科特琳:
class Test {
companion object {
fun database() {
val postgres = KGenericContainer("postgres:10")
postgres.addEnv("POSTGRES_DB", "service")
postgres.addEnv("POSTGRES_USERNAME", "postgres")
postgres.addEnv("POSTGRES_PASSWORD", "postgres")
postgres.withExposedPorts(5432)
postgres.start()
System.setProperty("spring.datasource.url", "jdbc:postgresql://${postgres.containerIpAddress}:${postgres.firstMappedPort}/service")
}
}
init {
database()
}
class KGenericContainer(dockerImageName: String) : GenericContainer<KGenericContainer>(dockerImageName)
}
fun main() {
Test()
}