如何使用从自定义 MySQL Docker 映像创建容器的 GenericContainer 配置 spring 数据源
Posted
技术标签:
【中文标题】如何使用从自定义 MySQL Docker 映像创建容器的 GenericContainer 配置 spring 数据源【英文标题】:How to Configure spring datasource with GenericContainer that's creating a container from a custom MySQL Docker image 【发布时间】:2019-11-21 06:58:27 【问题描述】:我正在尝试在 spring 中运行使用数据访问层的集成测试,但为此我需要连接到数据库以运行应用程序 bean 进行测试。我的一些测试涉及使用数据库持久化数据,所以这就是我选择 testContainers 使用 docker 运行我的数据库测试的原因。这里的问题是我已经有一个我自己的 sql 图像,其中包含我需要测试的填充条目,我不想从头开始创建一个空数据库进行测试,我想使用我自己的图像进行测试。但我不知道如何从 docker 映像为 Spring Boot 配置我的数据源,因为对于通用容器,我们没有 getJDBCUrl() 函数或任何可以帮助我配置的东西。如果我直接使用 mysql 映像,我知道配置数据源很容易。但是对于这个,我想使用我的图像。
@ClassRule
val databaseContainer: KGenericContainer = KGenericContainer("myOwnSqlImage:latest")
.withEnv("MYSQL_DATABASE", "databaseNamer")
.withEnv("MYSQL_USER", "root")
.withEnv("MYSQL_ROOT_PASSWORD", "root-password")
【问题讨论】:
【参考方案1】:这是一个 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()
【讨论】:
以上是关于如何使用从自定义 MySQL Docker 映像创建容器的 GenericContainer 配置 spring 数据源的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在 mysql docker 中创建模式和表而不为 mysql 构建新映像?
如何在 Elastic Beanstalk 上部署自定义 docker 映像?
如何将文件夹从我的主机挂载到自定义 docker 映像,在目录中使用 Dockerfile 进行设置? [复制]