ジョブリスナーを使用しない春のバッチジョブが完了したかどうかを判断するための最良の方法を探しています。私はjsr準拠のコンポーネントを使用しています。ジョブ リスナーがない理由は、エンド ユーザーがジョブを正しく定義してリスナーを含めることに依存したくないからです。
これまでに思いついた唯一のアプローチは、これを開始/再起動を呼び出しているクラスに入れることです
executionID = jobOperator.start(jobName, properties);
BatchStatus status = jobOperator.getJobExecution(executionID).getBatchStatus();
while(status != BatchStatus.ABANDONED && status != BatchStatus.COMPLETED && status != BatchStatus.FAILED &&
status != BatchStatus.STOPPED){
Thread.sleep(1000);
status = jobOperator.getJobExecution(executionID).getBatchStatus();
}
私がここで抱えている問題は、これがデータベースにクエリを実行することであり、かなり長時間実行されているジョブでは、ステータスを取得するために何千回もデータベースにクエリを実行できます。より良いアプローチがあるはずです。オペレーターまたはその他のオブジェクトがデータベースにアクセスすることなくジョブの現在のステータスを取得できるメモリ内の場所。あるいは、ジョブ仕様で定義することなくコールバックを行う方法かもしれません。