如何使用Spring Batch从“母亲”工作中触发多个“子”作业?

时间:2017-12-20 08:39:35

标签: java spring spring-boot spring-batch

我有Job查看配置表,我希望它使用表中的值触发每个配置条目Job

第一个Job由单个Tasklet组成,它执行配置表查找,然后每个条目触发后续Job

母亲Job代码:

@Configuration
public class RunProcessesJobConfig {

    ... // steps, jobs factory init
    @Autowired
    private Tasklet runProcessTask;    

    @Bean
    public Step runProcessStep() {
        return steps.get("runProcessStep")
                .tasklet(runProcessTask)
                .build();
    }

    @Bean
    public Job runProcessJob() {
        return jobs.get("runProcessJob")
                .start(runProcessStep())
                .build();
    }
}

我目前正在尝试实施的方法是将JobLauncher和我需要的Job自动装入Tasklet并从那里运行Job。< / p>

'RunProcessTask' - 自动连接到上面的作业配置:

@Autowired
Job myJob;

@Override
public RepeatStatus execute(StepContribution sc, ChunkContext cc) throws Exception {

    List<DeployCfg> deployCfgs = da.getJobCfgs();

    for (DeployCfg deployCfg : deployCfgs) {
        String cfg1 = deployCfg.getCfg1();
        String cfg2 = deployCfg.getCfg2();
        String cfg3 = deployCfg.getCfg3();

        // trigger job per config
        new JobParametersBuilder()
                .addString("cfg1", cfg1)
                .addString("cfg2", cfg2)
                .addString("cfg3", cfg3);

        final JobExecution jobExec = jobLauncher.run(myJob, new JobParameters());
    }

    return RepeatStatus.FINISHED;
}

当我尝试执行母亲Job时,TransactionSuspensionNotSupportedException: Transaction manager [org.springframework.batch.support.transaction.ResourcelessTransactionManager] does not support transaction suspension行出现jobLauncher.run(...)错误。

我想在Spring Batch的事务管理器中运行另一个Job中的Job。关于如何做到这一点的任何想法?

其他版本信息:

spring-boot-starter-parent version 1.5.9.RELEASE
spring-boot-starter-batch

0 个答案:

没有答案