【发布时间】:2020-09-30 23:38:24
【问题描述】:
我在终止当前正在运行的春季批次时遇到问题。我写了
Set<Long> executions = jobOperator.getRunningExecutions("Job-Builder");
jobOperator.stop(longExecutions.iterator().next());`
在通过 spring 文档后在我的代码中。
我面临的问题是有时工作的终止按预期发生,而其他时候工作的终止没有发生。事实上,每次我在 joboperator 上调用 stop 时,它都会更新 BATCH_JOB_EXECUTION 表。当终止成功发生时,通过在我的批处理过程中终止 jobExecution,作业的状态将更新为 STOPPED。其他时候,当它失败时,它正在完成批处理的其余不同流程并将状态更新为 BATCH_JOB_EXECUTION 表上的 FAILED。
但每次我在作业操作员中调用 stop 时,我都会在控制台中看到一条消息
2020-09-30 18:14:29.780 [http-nio-8081-exec-5] INFO o.s.b.c.l.s.SimpleJobOperator:428 - Aborting job execution: JobExecution: id=33058, version=2, startTime=2020-09-30 18:14:25.79, endTime=null, lastUpdated=2020-09-30 18:14:28.9, status=STOPPING, exitStatus=exitCode=UNKNOWN;exitDescription=, job=[JobInstance: id=32922, version=0, Job=[Job-Builder]], jobParameters=[{date=1601504064263, time=1601504064262, extractType=false, JobId=1601504064262}]
我的项目中有一系列流程和步骤。
我的整个批处理过程如下所示:
JobBuilderFactory 有 3 个流程
每个流程都有一个 stepbuilder 和两个 tasklet。
每个 stepbuilder 都有一个 partitioner 和一个基于 chunk(大小为 100)的 itemReader、itemProcessor 和 itemWriter。
当我在 jobBuilderFactory 中执行第一个流程时,我正在调用 stop 方法。完成整个过程大约需要 30 分钟。因此,从我调用 stop 方法开始大约需要 20-25 分钟,并且每个流中的块大小为 100,并且我正在处理超过 500k 条记录。
所以,我的问题是为什么 jobExecution 在调用停止方法时有时会停止(这是我想要的),以及为什么它无法在剩余的时间停止 jobExecution。
提前致谢
【问题讨论】:
标签: spring spring-batch spring-framework-beans spring-batch-tasklet