在Spring Boot应用程序中启动Spring Batch Job问题

时间:2015-08-11 13:41:13

标签: spring-boot spring-batch

我在Spring Boot应用程序中定义了多个Spring Batch Jobs。例如,job1,job2。等

当我为其中一个工作写了一个junit测试。 问题是,当我查看测试输出日志时,我发现它尝试启动此项目中定义的所有作业。

我在项目中使用最新的稳定的Spring Boot 1.2.5,Spring Batch 3.0.4。

junit测试的片段代码如下。

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

}

我定义的一些作业需要JobParamters才能运行,因此当我运行此测试时,其他作业已经启动并执行,然后由于缺少特定的JobParamters而抛出异常。

我尝试将@Named添加到Job并使用唯一名称注入,但得到了相同的结果。

我自己解决了这个问题。spring.batch.job.enabled=false添加到application.yml后,就可以了。

  • 默认情况下不会启动作业。
  • 运行测试时,它按预期工作,只启动了一项工作。

1 个答案:

答案 0 :(得分:3)

你做不到。几周前我问了同样的问题: Using @SpringApplicationConfiguration: How to set jobparameters in tests when using spring-batch and spring-boot

您必须直接使用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);
   }
}