【问题标题】:How to continue the interrupted batch job after application started应用程序启动后如何继续中断的批处理作业
【发布时间】:2017-12-25 12:27:34
【问题描述】:

我的批处理任务是由最终用户触发的,所以我不想在应用程序启动时执行所有批处理作业(使用spring.batch.job.enabled=false)。

但我希望有一个解决方案来处理这种情况,

当应用程序启动时,spring-batch 可以继续由于应用程序重启或异常中断而中断的批处理作业。

【问题讨论】:

  • @SabirKhan 谢谢

标签: spring-boot spring-batch


【解决方案1】:

Spring Batch 中失败/中断作业的恢复是通过提交具有相同作业参数的相同作业来实现的。

因此您可以执行以下操作来重新提交失败的作业(假设您使用 DB 来存储作业元数据)

  • 通过加入 BATCH_JOB_INSTANCE 和 BATCH_JOB_EXECUTION 表,找出所有未完成作业执行的作业实例
  • 找出上述每个不完整作业实例的最新BATCH_JOB_EXECUTIONS,并从BATCH_JOB_EXECUTION_PARAMS中查找对应的作业参数
  • 使用 BATCH_JOB_INSTANCE 中的作业名称和 BATCH_JOB_EXECUTION_PARAMS 中的作业参数重新提交作业

【讨论】:

  • 我相信有更简单的方法可以从 JobOperator 等中检索类似的信息。你可以看看
  • 你是对的。 JobOperator 可用于重新启动已停止的作业。问题是它是从它停止的点重新启动作业(基本上是恢复),还是会将作业视为新提交的并从头开始处理?
  • 为什么不试试呢? :) 如果您使用相同的作业参数提交,它通常会从失败的地方开始。
  • 是的,试过了。它实际上恢复了停止的工作。 JobOperator 的所有需求都是唯一的 executionId,因此 API 非常简单且运行良好。
  • @alexanoid 我认为这是不可能的。这简直违背了 Spring Batch 的设计
猜你喜欢
  • 2020-04-23
  • 1970-01-01
  • 2019-01-09
  • 1970-01-01
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 2012-01-06
相关资源
最近更新 更多