提示信息

spring batch ,step 传送数据到下一步

变形 已关注

在 Spring Batch 中,流程中不同步骤(Step)之间传递数据的一个常见方法是通过 JobExecutionStepExecution 的 ExecutionContext。ExecutionContext 是 Spring Batch 提供的一个存储重要数据的地方,这些数据可以在 Job 或 Step 结束时持久化,并在重新启动时恢复。

以下是如何在一个 Step 中设置数据,并在接下来的 Step 中获取这些数据的示例:

  1. // 第一个 step 的 tasklet,在这个 tasklet 中我们将数据放入 ExecutionContext
  2. @Bean
  3. public Step step1(StepBuilderFactory factory) {
  4. return factory.get("step1")
  5. .tasklet(new Tasklet() {
  6. public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
  7. Map<String, Object> map = new HashMap<>();
  8. map.put("key", "value");
  9. chunkContext.getStepContext()
  10. .getStepExecution()
  11. .getExecutionContext()
  12. .putAll(map);
  13. return RepeatStatus.FINISHED;
  14. }
  15. })
  16. .build();
  17. }
  18. // 第二个 step 的 tasklet,在这个 tasklet 中我们从 ExecutionContext 获取数据
  19. @Bean
  20. public Step step2(StepBuilderFactory factory) {
  21. return factory.get("step2")
  22. .tasklet(new Tasklet() {
  23. public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
  24. String value = (String) chunkContext.getStepContext()
  25. .getJobExecutionContext()
  26. .get("key");
  27. System.out.println(value); // 打印 'value'
  28. return RepeatStatus.FINISHED;
  29. }
  30. })
  31. .build();
  32. }

在上述代码中,第一个任务(Tasklet)将键值对 "key" 和 "value" 存储到当前 Step 的 ExecutionContext 中。然后在第二个任务中,我们从 Job 的 ExecutionContext 中获取并打印这个值。

这种方式可以在 Spring Batch 的不同步骤之间共享数据,但需要注意的是,ExecutionContext 应当只被用来存储小量的数据,因为所有存储在其中的数据将会被序列化和持久化,过多的数据可能会影响性

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
变形 关注 已关注

最近一次登录:2023-09-26 20:43:42   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图