我尝试将测试容器与 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 映像,我在
testcontainers.properties
中创建了文件 src/test/resources
:
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
您可以制作一个测试配置类,使用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);
}
}
}
可以通过 JDBC URL 启动 Oracle XE 容器。 您所要做的就是设置以下配置:
spring:
datasource:
driver-class-name: org.testcontainers.jdbc.ContainerDatabaseDriver
url: jdbc:tc:oracle:21-slim-faststart:///test?TC_INITSCRIPT=db/init.sql
在上面的示例中,init.sql 脚本必须位于类路径上。
有关此方法的更多文档可以在此处找到: https://java.testcontainers.org/modules/databases/jdbc/