【发布时间】:2014-12-30 12:57:51
【问题描述】:
我正在尝试春季批次。通过 ItemReader 和 ItemWriter 运行作业时,我看到了很多示例。如果作业运行没有错误,则没有问题。 但是我还没有弄清楚在处理了许多记录后作业失败时如何处理状态。
我的场景很简单。从 xml 文件中读取记录 (ItemReader) 并调用外部系统进行存储 (ItemWriter)。那么如果外部系统在进程中间不可用并且在一段时间后作业状态设置为 FAILED 会发生什么?如果第二天当外部系统启动并运行时我再次手动重新启动作业,我将获得先前加载的记录的副本。
在某种程度上,我必须知道跳过已加载记录的信息。 我试图通过 ExecutionContext 存储游标,但是当我重新启动作业时,我得到一个新的 JOB_EXECUTION_ID 并且游标数据丢失,因为在 BATCH_STEP_EXECUTION_CONTEXT.SHORT_CONTEXT 中获取了一个新行。 BATCH_STEP_EXECUTION.COMMIT_COUNT 和 BATCH_STEP_EXECUTION.READ_COUNT 在重启时也会被重置。
我使用 JobOperator 重新启动作业: jobOperator.restart(jobExecutionId);
有没有办法在不获取新的 jobExecutionId 的情况下重新启动作业或获取失败作业的状态的替代方法。如果有人找到(可以提供)包含状态和错误处理的示例,我会很高兴。
当然,另一种解决方案是创建我自己的表来跟踪已处理的记录,但我真的希望该框架有一个机制。否则我不理解 spring-batch 的想法。
问候 垫子
【问题讨论】:
标签: spring-batch