如何使用 TestContainers + Spring Boot + oracle-xe
Posted
技术标签:
【中文标题】如何使用 TestContainers + Spring Boot + oracle-xe【英文标题】:How to use TestContainers + Spring Boot + oracle-xe 【发布时间】:2019-12-10 00:23:57 【问题描述】:我尝试使用带有 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
在我的src/test/application.properties
中,我将 url 数据源声明为:
spring.datasource.url=jdbc:tc:oracle-xe://somehostname:someport/databasename?TC_INITSCRIPT=schema-test.sql
为了指示要为 oracle-xe 拉取的 docker 映像,我在 src/test/resources
中创建了文件 testcontainers.properties
:
oracle.container.image=oracleinanutshell/oracle-xe-11g:1.0.0
您知道如何完成这项工作吗?
它与 mysql 完美配合,使用数据源 url:
spring.datasource.url=jdbc:tc:mysql:5.6.23://somehostname:someport/databasename?TC_INITSCRIPT=schema-test.sql
【问题讨论】:
【参考方案1】:您可以创建一个测试配置类,使用 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);
【讨论】:
谢谢!这样可行。但是是否可以仅通过 application.properties 中的配置(如 MySQL)使其工作? 相信在容器启动之前你不可能知道所有的oracle配置以上是关于如何使用 TestContainers + Spring Boot + oracle-xe的主要内容,如果未能解决你的问题,请参考以下文章
如何强制 Testcontainers 使用特定的 docker 镜像?
使用 Testcontainers 时如何设置 Postgresql 的端口?
如何在多个 SpringBootTests 之间重用 Testcontainers?
如何使用 Testcontainers 将可执行文件复制到 Docker 容器