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

时间:2019-05-08 18:49:40

标签: spring-batch integration-testing

尝试为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

与我在src / main / resources / application.properties上使用的相同并且可以工作。

这是我为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();
    }
}

我有一个特定的TestConfigurationBean一起生成DataSource

@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

我不明白为什么在主应用程序中所有功能都能自动运行,而在测试中却无法运行。

1 个答案:

答案 0 :(得分:0)

如果一个 Spring 测试未命中错过了实际应用中 Spring Boot 自动配置的 using ClosedXML.Excel; using System.Collections.Generic; namespace ConsoleApp12 { class Program { static void Main(string[] args) { CreateExcelSheet(new List<string> { "s:1", "s:2" }); } public static void CreateExcelSheet(List<string> list) { var wb = new XLWorkbook(); var ws = wb.Worksheets.Add("Data_Test_Worksheet"); for (int i = 0; i < list.Count; i++) { var detail = list[i].Split(':'); var row = ws.Row(i + 1); row.Cell(1).Value = detail[0]; row.Cell(2).Value = detail[1]; } wb.SaveAs(@"Data_Text.xlsx"); } } } ,又不想写完整的 BatchDataSourceInitializer,可以有选择地添加通过添加注解为 Spring Batch 自动配置

@SpringBootTest

这将为注入的 @ImportAutoConfiguration(BatchAutoConfiguration.class) 提供初始值设定项。