尝试为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();
}
}
我有一个特定的TestConfiguration
与Bean
一起生成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
。
我不明白为什么在主应用程序中所有功能都能自动运行,而在测试中却无法运行。
答案 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)
提供初始值设定项。