【问题标题】:Spring Batch - I have multiple jobs to be executed sequentially and pass results of first job to secondSpring Batch - 我有多个作业要按顺序执行并将第一个作业的结果传递给第二个作业
【发布时间】:2015-11-04 22:20:26
【问题描述】:

Spring Batch 作业我有多个作业要按顺序执行。 我需要将job1的结果传递给job2进行处理,然后将job2的数据传递给job3。等等。并且可以使用 job1 到 job5(last job) 的结果并写入输出。

Job1 - 正在从 db 读取并将结果存储在 Hashmap 中 Job2 从文件中读取并使用 job1 hashmap 来处理结果。

所以请任何人都可以为此提出最佳解决方案。我能够使用 ExecutionContext 和 JobPromotionListener 在步骤之间传递数据,但不确定如何在多个作业之间执行相同操作

【问题讨论】:

  • 批处理作业是时间驱动的,而不是事件驱动的(如您的情况所述,当 Job1 完成时,执行 Job2)。无法像客户端服务器模型那样以黑白方式通信两个批处理作业。您可能应该尝试将 Job1 结果存储在 Job2 可以访问它的某个文件或 DB 表中,并为您安排具有足够时间差的作业。
  • 为什么需要这些不同的工作?一份工作有多个处理器不是更有意义吗?
  • 感谢您的回复,我想我们将使用多个步骤

标签: spring spring-batch


【解决方案1】:

您的批处理不应有 5 个作业,而应该有 5 个相同作业的步骤。这是实现您想要实现的目标的最佳方式。

Spring Batch 框架会保留每个步骤执行的状态,因此如果您的某个步骤失败,您可以重新启动只会处理剩余步骤的作业。当然,有一些自定义选项可以控制一个步骤如何以及何时被视为失败或可重新启动。

【讨论】:

  • 感谢您的回复,我认为我们将使用多个步骤,并且在步骤之间传递数据使用 executioncontext 或使用 bean 并自动装配它。谁能告诉我使用 bean 的步骤并自动装配它以在步骤之间传递数据
  • 这取决于数据有多大,但在正常情况下,您应该使用 JobExecutionContext。
  • 感谢您对我们想要使用 JobExecutionContext 的一些值以及想要自动装配 bean 的一些大数据做出回应,任何链接或示例都会有所帮助
【解决方案2】:

Spring batch 不提供相同的开箱即用支持。似乎您只需要配置一些可以顺序执行的步骤。您也可以使用读取器、处理器和写入器来划分步骤

【讨论】:

  • 感谢您的回复,我想我们将使用多个步骤
猜你喜欢
  • 1970-01-01
  • 2014-12-10
  • 2017-07-06
  • 2013-02-21
  • 2020-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
相关资源
最近更新 更多