运行 Spring Batch 测试,不初始化数据库

Jav*_*xas 5 integration-testing spring-batch

尝试为 Spring Batch 应用程序创建一些端到端测试,效果很好。我收到一个 sql 错误,因为它没有初始化 Spring Batch 处理表:org.postgresql.util.PSQLException: ERROR: relation "batch_job_instance" does not exist

我在以下位置有这段代码src/test/resources/application.properties

spring.datasource.initialize=true
spring.datasource.initialization-mode=always
spring.datasource.platform=postgresql

spring.batch.initialize-schema=always
Run Code Online (Sandbox Code Playgroud)

这与我在`src/main/resources/application.properties 上的相同并且有效。

这是我的代码ApplicationTest

spring.datasource.initialize=true
spring.datasource.initialization-mode=always
spring.datasource.platform=postgresql

spring.batch.initialize-schema=always
Run Code Online (Sandbox Code Playgroud)

我有一个特定的方法TestConfiguration来生成Bean一个DataSource.

@RunWith(SpringRunner.class)
@ContextConfiguration(classes={
        TestConfiguration.class,
        JobCompletionNotificationListener.class,
        BatchConfiguration.class
})
@SpringBatchTest
public class ApplicationTests {

    @Autowired
    private JobLauncherTestUtils jobLauncherTestUtils;


    @Test
    public void testJob() throws Exception {
        JobExecution jobExecution = jobLauncherTestUtils.launchJob();
    }
}
Run Code Online (Sandbox Code Playgroud)

我期望创建所有表(内部 Batch 表和 中定义的表schema-all.sql)。

但我收到以下错误org.postgresql.util.PSQLException: ERROR: relation "batch_job_instance" does not exist

我不明白为什么在主应用程序中一切都会自动工作,而在测试中却不然。

Hen*_*ing 1

如果 Spring 测试未命中,错过了BatchDataSourceInitializer实际应用中 Spring Boot 自动配置的内容,并且您不想编写完整的@SpringBootTest,可以通过添加注解来选择性地添加 Spring Batch 的自动配置

@ImportAutoConfiguration(BatchAutoConfiguration.class)
Run Code Online (Sandbox Code Playgroud)

然后,这将为注入的DataSource.