Spring boot 在Spring引导应用程序中启动Spring批处理作业问题
我已经在Spring启动应用程序中定义了多个Spring批处理作业。例如,job1,job2。等等 当我为其中一个作业编写junit测试时问题是,当我查看测试输出日志时,发现它试图启动此项目中定义的所有作业。 我在项目中使用了最新的稳定Spring Boot 1.2.5、Spring Batch 3.0.4 junit测试的片段代码如下Spring boot 在Spring引导应用程序中启动Spring批处理作业问题,spring-boot,spring-batch,Spring Boot,Spring Batch,我已经在Spring启动应用程序中定义了多个Spring批处理作业。例如,job1,job2。等等 当我为其中一个作业编写junit测试时问题是,当我查看测试输出日志时,发现它试图启动此项目中定义的所有作业。 我在项目中使用了最新的稳定Spring Boot 1.2.5、Spring Batch 3.0.4 junit测试的片段代码如下 @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @TransactionConfigu
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@TransactionConfiguration
@SpringApplicationConfiguration(classes = BatchApplication.class)
public class SubmitJobTest {
@Inject Job job1;
@Test
public void testLockJob() {
logger.debug("lockId is @" + task.getLockId());
JobParametersBuilder builder = new JobParametersBuilder()
.addString("lockId", lockId.toString());
try {
JobExecution jobExecution = jobLauncher.run(this.job1, builder.toJobParameters());
assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus());
} catch (JobExecutionAlreadyRunningException | JobRestartException | JobInstanceAlreadyCompleteException | JobParametersInvalidException ex) {
ex.printStackTrace();
}
}
我定义的一些作业需要运行JobParameters,所以当我运行此测试时,其他作业启动并执行,然后由于缺少特定的JobParameters而引发异常
我尝试将@Named
添加到作业中,并使用唯一的名称将其注入,但得到了相同的结果
我自己解决了这个问题。将spring.batch.job.enabled=false
添加到application.yml
后,它就可以工作了
- 默认情况下不会启动作业
- 当运行测试时,它像我预期的那样工作,只启动了一个作业
- 你不能那样做。几周前我问了同样的问题:
您必须直接使用JobLauncherCommandLineRunner:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {MyBatchRootConfiguration.class})
@IntegrationTest({"aProp=aValue"})
public class MyBatchTestClass {
@Autowired
private JobLauncherCommandLineRunner runner;
@Test
public void launchTest() {
String[] myArgs = new String[]{"jobParam1=value1"};
runner.run(myArgs);
}
}
注意:如果上下文中有多个可运行作业,则必须定义属性“spring.batch.job.names=job1”,以便在测试中仅启动job1(@IntegrationTest({“spring.batch.job.names=job1”})。问题是为什么Spring Boot在启动时自动启动作业,我需要手动运行我的作业。有可能禁止它启动作业吗?嗨,hansjoerg,我想我自己解决了这个问题,将
Spring.batch.job.enabled=false
添加到application.properties中以禁用启动自动化。