Dmy*_*kyi 0 java spring-boot testcontainers
语境:
我有一个非Spring Boot应用程序,我将其包装在 Spring Boot 中以测试功能。碰巧代码在测试中有一个内存数据库,我想针对不同的数据库进行测试以重现生产环境。我决定保持testcontainers所有现有测试不变。
问题:
我需要将数百万行加载到测试容器中。问题是如何填充数据库testcontainers?我发现了类似的问题->如何填充testcontainers?但我仍然不知道如何在其中填充数据。
我如何填充数据testcontainers?
DatabaseTestInitalizer.java我用于实例化容器:
import org.springframework.boot.test.util.EnvironmentTestUtils;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.testcontainers.containers.MSSQLServerContainer;
public class DatabaseTestInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
private MSSQLServerContainer mssqlServerContainer;
@Override
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
mssqlServerContainer = new MSSQLServerContainer();
mssqlServerContainer.start();
// This is solution for 1.x.x Spring Boot framework
// Article for migration from 1.x.x to 2.x.x Spring Boot /sf/ask/3830329681/
EnvironmentTestUtils.addEnvironment(configurableApplicationContext.getEnvironment(),
"spring.datasource.url=" + mssqlServerContainer.getJdbcUrl(),
"spring.datasource.username=" + mssqlServerContainer.getUsername(),
"spring.datasource.password=" + mssqlServerContainer.getPassword()
);
}
}
Run Code Online (Sandbox Code Playgroud)
经过更严格的搜索后,我可以使用withInitScript架构和数据并将其定义到 中init.sql,确保它db/init.sql位于 test/resources 文件夹中。
它的工作原理如下:
public MSSQLServerContainer mssqlServerContainer = (MSSQLServerContainer) new MSSQLServerContainer()
.withInitScript("db/init.sql")
.withExposedPorts(1433);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您不需要Flyway.
| 归档时间: |
|
| 查看次数: |
9178 次 |
| 最近记录: |