Spring 使用多种数据库类型启动集成测试
Spring Boot integration test using multiple database types
在我的测试中,我需要使用不同的数据库(mysql、oracle 等)进行测试,我想知道是否可以使用 SpringRunner。
我正在使用@Sql组和@Sql注解,但我没有发现如何指示脚本文件(sql)对应的数据库。
示例:
@Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = "classpath:tenantBeforeTestRun.sql")
此注释将我的测试配置为对所有数据库类型执行脚本,但此文件在 Oracle 上不起作用。
@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
class的某处:
@Bean(name = "db1")
@ConfigurationProperties(prefix="spring.db1")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
在我的测试中,我需要使用不同的数据库(mysql、oracle 等)进行测试,我想知道是否可以使用 SpringRunner。
我正在使用@Sql组和@Sql注解,但我没有发现如何指示脚本文件(sql)对应的数据库。
示例:
@Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = "classpath:tenantBeforeTestRun.sql")
此注释将我的测试配置为对所有数据库类型执行脚本,但此文件在 Oracle 上不起作用。
@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
class的某处:
@Bean(name = "db1")
@ConfigurationProperties(prefix="spring.db1")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}