8

JVM クラッシュ後にジョブを再起動する方法は?

JVM がクラッシュしたり、システムに障害が発生したときに、Spring Batch フレームワークに実装された多くのジョブを実行していました。失敗後にこれらのジョブを再開するにはどうすればよいですか?

4

3 に答える 3

7

次のように、「実行中」のジョブを再起動する前に失敗としてマークする必要があります。

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);
        }
    }
}
于 2014-07-28T20:30:45.860 に答える
6

基本的に、次のように実行できます。

  1. アプリケーション コンテキストでファクトリ Bean を構成JobExplorerします。

  2. JobOperatorアプリケーション コンテキストで Bean を構成する

  3. 個別のジョブ名について jobExplorer にクエリを実行します。jobExplorer.getJobNames()

  4. 手順 (3) の各ジョブについて、未完了のジョブについて jobExplorer にクエリを実行します。 jobExplorer.findRunningJobExecutions(String jobName)

  5. JobExecutionステップ (4) の呼び出しごとに:jobOperator.restart(jobExecution.getJobId())

  6. 他のジョブが起動される前に、ブート シーケンス中にこの手順を呼び出すようにしてください。

findRunningJobExecutions()技術的には、オーバーライドなどによってステップ 3 と 4 をマージすることは可能ですJobExecutionDaoが、現在の API ではサポートされていません。

前述の Spring Bean 構成のヘルプについては、リファレンス ドキュメントを参照してください。

于 2013-03-17T21:19:20.113 に答える