spring batch ,step 传送数据到下一步
在 Spring Batch 中,流程中不同步骤(Step)之间传递数据的一个常见方法是通过 JobExecution
或 StepExecution
的 ExecutionContext。ExecutionContext 是 Spring Batch 提供的一个存储重要数据的地方,这些数据可以在 Job 或 Step 结束时持久化,并在重新启动时恢复。
以下是如何在一个 Step 中设置数据,并在接下来的 Step 中获取这些数据的示例:
// 第一个 step 的 tasklet,在这个 tasklet 中我们将数据放入 ExecutionContext
@Bean
public Step step1(StepBuilderFactory factory) {
return factory.get("step1")
.tasklet(new Tasklet() {
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
Map<String, Object> map = new HashMap<>();
map.put("key", "value");
chunkContext.getStepContext()
.getStepExecution()
.getExecutionContext()
.putAll(map);
return RepeatStatus.FINISHED;
}
})
.build();
}
// 第二个 step 的 tasklet,在这个 tasklet 中我们从 ExecutionContext 获取数据
@Bean
public Step step2(StepBuilderFactory factory) {
return factory.get("step2")
.tasklet(new Tasklet() {
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
String value = (String) chunkContext.getStepContext()
.getJobExecutionContext()
.get("key");
System.out.println(value); // 打印 'value'
return RepeatStatus.FINISHED;
}
})
.build();
}
在上述代码中,第一个任务(Tasklet)将键值对 "key" 和 "value" 存储到当前 Step 的 ExecutionContext 中。然后在第二个任务中,我们从 Job 的 ExecutionContext 中获取并打印这个值。
这种方式可以在 Spring Batch 的不同步骤之间共享数据,但需要注意的是,ExecutionContext 应当只被用来存储小量的数据,因为所有存储在其中的数据将会被序列化和持久化,过多的数据可能会影响性