你至少有4种可能性:
- 使用ExecutionPromotionListener 将数据传递到以后的步骤
- 使用(spring)bean来保存步间数据,例如ConcurrentHashMap
如果不采取进一步措施,该数据将无法重新启动 - 访问你的tasklet中的JobExecutionContext,应谨慎使用,这将导致并行步骤出现线程问题
- 使用新的jobscope(引入的弹簧批次3)
从Tasklet访问JobExecution的代码示例:
设定值
public class ChangingJobExecutionContextTasklet implements Tasklet { @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { // set variable in JobExecutionContext chunkContext .getStepContext() .getStepExecution() .getJobExecution() .getExecutionContext() .put("value", "foo"); // exit the step return RepeatStatus.FINISHED; }}提取值
public class ReadingJobExecutionContextTasklet implements Tasklet { private static final Logger LOG = LoggerFactory.getLogger(ChangingJobExecutionContextTasklet.class); @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { // pull variable from JobExecutionContext String value = (String) chunkContext .getStepContext() .getStepExecution() .getJobExecution() .getExecutionContext() .get("value"); LOG.debug("Found value in JobExecutionContext:" + value); // exit the step return RepeatStatus.FINISHED; }}


