首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用从自定义MySQL Docker镜像创建容器的GenericContainer配置spring数据源

如何使用从自定义MySQL Docker镜像创建容器的GenericContainer配置spring数据源
EN

Stack Overflow用户
提问于 2019-07-11 22:10:02
回答 1查看 419关注 0票数 0

我正尝试在spring中运行一个使用数据访问层的集成测试,但为此,我需要连接到一个数据库,以便运行应用程序bean进行测试。我的一些测试涉及使用数据库持久化数据,这就是为什么我选择testContainers来使用docker运行我的数据库测试。这里的问题是,我已经有了自己的sql映像,其中包含测试所需的填充条目,并且我不想为了测试从头开始创建一个空数据库,我希望使用自己的映像进行测试。但是我不知道如何从docker镜像配置我的spring boot的数据源,因为对于通用容器,我们没有getJDBCUrl()函数或任何可以帮助我进行配置的东西。我知道如果我直接使用Mysql镜像,配置数据源会很容易。但对于这一次,我想使用我的图像。

代码语言:javascript
复制
@ClassRule
val databaseContainer: KGenericContainer = KGenericContainer("myOwnSqlImage:latest")
        .withEnv("MYSQL_DATABASE", "databaseNamer")
        .withEnv("MYSQL_USER", "root")
        .withEnv("MYSQL_ROOT_PASSWORD", "root-password")
EN

回答 1

Stack Overflow用户

发布于 2019-08-24 19:10:18

这是一个postgres示例,但我认为您也可以在MySQL中重用它。你应该看看System.setProperty("spring.datasource.url", "jdbc:postgresql://${postgres.containerIpAddress}:${postgres.firstMappedPort}/service")

Groovy:

代码语言:javascript
复制
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")
}

Kotlin:

代码语言:javascript
复制
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()
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56991196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档