使用多种数据库类型的 Spring Boot 集成测试

Posted

技术标签:

【中文标题】使用多种数据库类型的 Spring Boot 集成测试【英文标题】:Spring Boot integration test using multiple database types 【发布时间】:2018-10-18 19:31:56 【问题描述】:

在我的测试中,我需要使用不同的数据库(mysql、oracle 等)进行测试,我想知道 SpringRunner 是否可以。

我正在使用@SqlGroup 和@Sql 注释,但是我没有发现如何指示脚本文件(sql)对应的数据库。

例子:

@Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = "classpath:tenantBeforeTestRun.sql")

此注释将我的测试配置为对所有数据库类型执行脚本,但此文件在 Oracle 上不起作用。

【问题讨论】:

您可能需要提供配置和 Spring Boot 应用程序才能知道问题所在。 【参考方案1】:

@Sql 注解让您可以定义一个 SqlConfig ,其中包含一个 datasource bean 名称。 然后你可以定义许多数据源bean,可能有不同的驱动程序,并从不同的@Sql 引用它们。这可能会有所帮助:Spring Boot Multiple Datasource

@Sql(..., config = @SqlConfig(datasource = "db1", ...)

application.properties:

#first db
spring.db1.url = [url]
spring.db1.username = [username]
spring.db1.password = [password]
spring.db1.driverClassName = oracle.jdbc.OracleDriver

#second db ...
spring.secondDatasource.url = [url]
spring.secondDatasource.username = [username]
spring.secondDatasource.password = [password]
spring.secondDatasource.driverClassName = oracle.jdbc.OracleDriver

然后,在@Configuration 类的某个地方:

@Bean(name = "db1")
@ConfigurationProperties(prefix="spring.db1")
public DataSource secondaryDataSource() 
    return DataSourceBuilder.create().build();

【讨论】:

以上是关于使用多种数据库类型的 Spring Boot 集成测试的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot集成Redis—RedisTemplate的使用来存储Map集合

SpringBoot系列:Spring Boot集成Spring Cache,使用RedisCache

Spring Boot集成Redis实战操作

Spring Boot 2.X:Spring Boot 集成 Redis

spring boot集成redis基础入门

Spring Boot集成mongodb数据库