JVM クラッシュ後にジョブを再起動する方法は?
JVM がクラッシュしたり、システムに障害が発生したときに、Spring Batch フレームワークに実装された多くのジョブを実行していました。失敗後にこれらのジョブを再開するにはどうすればよいですか?
JVM クラッシュ後にジョブを再起動する方法は?
JVM がクラッシュしたり、システムに障害が発生したときに、Spring Batch フレームワークに実装された多くのジョブを実行していました。失敗後にこれらのジョブを再開するにはどうすればよいですか?
次のように、「実行中」のジョブを再起動する前に失敗としてマークする必要があります。
List<String> jobs = jobExplorer.getJobNames();
for (String job : jobs) {
Set<JobExecution> runningJobs = jobExplorer.findRunningJobExecutions(job);
for (JobExecution runningJob : runningJobs) {
try {
runningJob.setStatus(BatchStatus.FAILED);
runningJob.setEndTime(new Date());
jobRepository.update(runningJob);
jobOperator.restart(runningJob.getId());
} catch (Exception e) {
LOG.error(e.getMessage(), e);
}
}
}
基本的に、次のように実行できます。
アプリケーション コンテキストでファクトリ Bean を構成JobExplorer
します。
JobOperator
アプリケーション コンテキストで Bean を構成する
個別のジョブ名について jobExplorer にクエリを実行します。jobExplorer.getJobNames()
手順 (3) の各ジョブについて、未完了のジョブについて jobExplorer にクエリを実行します。
jobExplorer.findRunningJobExecutions(String jobName)
JobExecution
ステップ (4) の呼び出しごとに:jobOperator.restart(jobExecution.getJobId())
他のジョブが起動される前に、ブート シーケンス中にこの手順を呼び出すようにしてください。
findRunningJobExecutions()
技術的には、オーバーライドなどによってステップ 3 と 4 をマージすることは可能ですJobExecutionDao
が、現在の API ではサポートされていません。
前述の Spring Bean 構成のヘルプについては、リファレンス ドキュメントを参照してください。