質問は、バッチ ジョブの自動回復戦略に関するものです。いくつかのジョブが実行されていたときに (ステータスが「STARTED」で終了時刻が null の場合)、不明な理由でサーバーがシャットダウンされたと言う。サーバーを再起動したときに、これらすべてのジョブを回復するにはどうすればよいでしょうか。
私の状況では、リクエストを受信して DB キューに保存する独自のジョブ ランチャーを作成しました。次に、独自のジョブ スケジューラを実行して、DB からの要求をポーリングし、ジョブを実行します。これらのジョブのステータスを「STARTED」から「STARTING」に変更して、スケジューラが再び取得できるようにするために、現在の試行には次のものが含まれています。
Spring バッチは「STARTED」ジョブを再起動できず、ジョブが再起動可能であるため、Spring バッチは同じジョブ インスタンスで新しいジョブ実行を作成します。したがって、ジョブを再開できる場合は、元のジョブ ID を変更する必要があります。しかし、ジョブ演算子を使用して「STARTED」ステータスのジョブを停止し、再度再開しようとしましたが、失敗しました。なぜこれが機能しないのですか?
jobOperator.stop(ジョブID); jobOperator.restart(jobId);
また、ジョブ リポジトリを使用して、ジョブの実行ステータスを「STARTED」から「STARTING」に更新することもできませんでした。
jobExecution.setStatus(BatchStatus.STARTED); jobRepository.update(ジョブ実行);
これを達成するための考えをいただければ幸いです。