运行 Spring 批处理测试,不初始化数据库



尝试为弹簧批处理应用程序创建一些端到端测试,该测试效果很好。我遇到了一个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

我在`src/main/resources/application.properties and Works.properties and works。

这是我对ApplicationTest的代码:

@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();
    }
}

我有一个特定的TestConfiguration,可以用DataSource生成Bean

@Configuration
@PropertySource("application.properties")
public class TestConfiguration {
    @Autowired
    private Environment env;
    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(env.getProperty("spring.datasource.driverClassname"));
        dataSource.setUrl(env.getProperty("spring.datasource.url"));
        dataSource.setUsername(env.getProperty("spring.datasource.username"));
        dataSource.setPassword(env.getProperty("spring.datasource.password"));
        return dataSource;
    }

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

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

我不明白为什么在主应用程序中都可以自动起作用,并且它不在测试中。

如果错过了弹簧测试会错过实际应用程序中春季启动自动配置的BatchDataSourceInitializer,并且您不想编写完整的@SpringBootTest,则可以选择性地添加通过添加注释

的春季批次自动配置
@ImportAutoConfiguration(BatchAutoConfiguration.class)

这将为注射的DataSource提供初始化器。

最新更新