如何使用 TestContainers + Spring Boot + oracle-xe

L. *_*CWI 3 spring oracle-xe spring-boot testcontainers

我尝试将测试容器与 Oracle-XE 模块和 Spring Boot 一起使用,到目前为止,当我启动我的测试时,我遇到了异常:

Caused by: java.lang.IllegalArgumentException: JDBC URL matches jdbc:tc: prefix but the database or tag name could not be identified
Run Code Online (Sandbox Code Playgroud)

在我的 中src/test/application.properties,我将 url 数据源声明为:

spring.datasource.url=jdbc:tc:oracle-xe://somehostname:someport/databasename?TC_INITSCRIPT=schema-test.sql
Run Code Online (Sandbox Code Playgroud)

为了表明泊坞窗图像拉为Oracle-XE,我创建的文件testcontainers.propertiessrc/test/resources

oracle.container.image=oracleinanutshell/oracle-xe-11g:1.0.0
Run Code Online (Sandbox Code Playgroud)

你有什么想法如何使这项工作?

它与 MySQL 完美配合,数据源 url :

spring.datasource.url=jdbc:tc:mysql:5.6.23://somehostname:someport/databasename?TC_INITSCRIPT=schema-test.sql
Run Code Online (Sandbox Code Playgroud)

MC *_*ava 5

您可以创建一个测试配置类,使用 oracle xe 容器配置重新定义数据源 bean。

public class OracleIT  {

    @ClassRule
    public static OracleContainer oracleContainer = new OracleContainer();

    @BeforeAll
    public static void startup() {
        oracleContainer.start();
    }

    @TestConfiguration
        static class OracleTestConfiguration {

            @Bean
            DataSource dataSource() {
                HikariConfig hikariConfig = new HikariConfig();
                hikariConfig.setJdbcUrl(oracleContainer.getJdbcUrl());
                hikariConfig.setUsername(oracleContainer.getUsername());
                hikariConfig.setPassword(oracleContainer.getPassword());

                return new HikariDataSource(hikariConfig);
            }
      }

}
Run Code Online (Sandbox Code Playgroud)

  • 我相信在容器启动之前你不可能知道所有的oracle配置 (2认同)