是否可以设置一个指向多个 mariadb 数据库的测试容器?

Is it possible to set up a test container that points to multiple mariadb databases?

尝试在 quarkus 中进行一些测试。我可以在 quarkus application.properties 文件中设置多个数据库,一切正常。无法在多个数据源上对 运行 进行测试。我可以连接到其中一个,但不能同时连接到两者。像这样:

      private static final MariaDBContainer DATABASE = 
  new MariaDBContainer<>(DockerImageName.parse(DOCKER_IMAGE).asCompatibleSubstituteFor("mariadb"))
                    .withDatabaseName(FIRST_DB_NAME)
                    .withUsername(DB_USER)
                    .withPassword(DB_PASS)
                    .withDatabaseName(SECOND_DB_NAME)
                    .withUsername(DB_USER)
                    .withPassword(DB_PASS);

如果你想要两个数据库服务器,你可以复制你的容器设置:

@Container
static final MariaDBContainer DATABASE_ONE =
  new MariaDBContainer<>(DockerImageName.parse("mariadb:10.3.6"))
    .withDatabaseName("maindb")
    .withUsername("duke")
    .withPassword("duke");

@Container
static final MariaDBContainer DATABASE_TWO =
  new MariaDBContainer<>(DockerImageName.parse("mariadb:10.3.6"))
    .withDatabaseName("seconddb")
    .withUsername("duke")
    .withPassword("duke");

由于 Testcontainer 在临时端口上启动它们,因此没有冲突。

如果你想在同一个数据库服务器中使用两个数据库,你可以提供一个初始化脚本,让 Testcontainers 在容器启动时执行。使用此脚本,您可以创建第二个数据库:

@Container
static final MariaDBContainer DATABASE =
  new MariaDBContainer<>(DockerImageName.parse("mariadb:10.3.6"))
    .withDatabaseName("maindb")
    .withUsername("duke")
    .withPassword("duke")
    .withInitScript("CREATE_SECOND_DB.sql");

其中 CREATE_SECOND_DB.sql 在您的类路径中,内容如下:

CREATE OR REPLACE DATABASE seconddb;

还有更多 Testcontainers initialization strategies 可以调整您的容器。