現在実行中の春のバッチを終了する際に問題が発生しています。私が書いた
Set<Long> executions = jobOperator.getRunningExecutions("Job-Builder");
jobOperator.stop(longExecutions.iterator().next());`
春のドキュメントを読んだ後の私のコードで。
私が直面している問題は、ジョブの終了が期待どおりに行われることもあれば、ジョブの終了が行われないこともあります。実際、joboperator で stop を呼び出すたびに、BATCH_JOB_EXECUTION テーブルが更新されます。終了が正常に行われると、バッチ プロセスで jobExecution を強制終了することにより、ジョブのステータスがSTOPPEDに更新されます。それ以外の場合は、バッチの残りのさまざまなフローを完了し、BATCH_JOB_EXECUTION テーブルのステータスをFAILEDに更新します。
しかし、job オペレーターで 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
つのフローがあります。各フローにはステップビルダーと 2 つのタスクレットがあります。
各ステップビルダーには、パーティショナーとチャンク (サイズは 100) ベースの itemReader、itemProcessor、および itemWriter があります。
jobBuilderFactory で最初のフローを実行しているときに、停止メソッドを呼び出しています。完了するまでの全プロセスには約 30 分かかります。そのため、停止メソッドを呼び出してから約 20 ~ 25 分かかり、すべてのフローでチャンク サイズが 100 になり、50 万件を超えるレコードを処理しています。
それで、私の質問は、なぜjobExecutionがstopメソッドと呼ばれたときに停止するのか(これが私が望んでいたことです)、なぜjobExecutionを残りの時間停止できないのかということです。
前もって感謝します