限制批处理作业的生命周期

2023-12-10

有没有办法将正在运行的 Spring Batch 作业的生命周期限制为例如23小时?

我们每天通过 cron 作业启动批处理作业,该作业大约需要 9 个小时。在某些情况下,数据库连接速度太慢,导致作业需要 60 多个小时才能完成。问题是下一个作业实例会在第二天由 cronjob 启动 - 然后在后天启动另一个实例 - 然后另一个实例......

如果这项工作没有在例如时间内完成23小时后,我想终止它并返回错误。有没有办法用 spring-batch 来做到这一点?


Using a 步骤监听器您可以通过致电来停止工作StepExecution#setTerminateOnly.

stepBuilderFactory
...
.writer(writer)
.listener(timeoutListener)
...
.build()

TimeoutListener 可能看起来像这样

@Component
public class TimeoutListener implements StepListener {

    private StepExecution stepExecution;

    @BeforeStep
    public void beforeStep(StepExecution stepExecution) {
        this.stepExecution = stepExecution;
    }

    @BeforeRead
    public void beforeRead() {
        if (jobShouldStop()) {
            stepExecution.setTerminateOnly();
        }
    }

    private boolean jobShouldStop() {
        // ...
    }
}

这将正常停止作业,而不会强制终止任何正在运行的步骤。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

限制批处理作业的生命周期 的相关文章

随机推荐