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