このトピックでは、SchedulerX での Spring ジョブの管理に関するよくある質問への回答を提供します。
SchedulerX がスケジュールされた Spring ジョブを引き継いだ後、元の Spring タイマーが引き続き実行されるのはなぜですか?
アプリケーションでカスタムスケジューラが指定されている場合、SchedulerX はカスタムスケジューラを上書きします。org.springframework.scheduling.annotation.SchedulingConfigurer インターフェースを実装するクラスがアプリケーションプロジェクトに存在するかどうか、および ScheduledTaskRegistrar の setScheduler メソッドがデフォルトのスケジューラを上書きするために呼び出されているかどうかを確認します。クラスが存在する場合、またはデフォルトのスケジューラが上書きされている場合は、関連するコードをコメントアウトします。
Spring ジョブのコンテキストを取得するにはどうすればよいですか?
コンテキストを取得するには、次のコードをアプリケーションプロジェクトコードに追加します。
JobContext jobContext = ContainerFactory.getContainerPool().getContext();Spring ジョブは処理結果を返しますか?
エージェントのバージョンが 1.10.11 以降の場合、Spring ジョブは処理結果を返すことができます。処理結果は、指定されたスケジューリング方法に基づいて返されます。
@Scheduled(cron = "0/5 * * * * ?")
public ProcessResult helloStandalone1() {
try {
logger.info(DateUtil.now() + " " + Thread.currentThread().getName() + " hello world. start"); // 処理開始のログ出力
TimeUnit.SECONDS.sleep(2L); // 2秒待機
logger.info(DateUtil.now() + " " + Thread.currentThread().getName() + " hello world. end"); // 処理終了のログ出力
} catch (Exception e) {
e.printStackTrace();
logger.info(DateUtil.now() + " " + Thread.currentThread().getName() + " hello world. exception end.."); // 例外発生時のログ出力
}
return new ProcessResult(true, "Processing result"); // 処理結果を返す
}
@Scheduled(cron = "0/5 * * * * ?")
public String helloStandalone2() {
try {
logger.info(DateUtil.now() + " " + Thread.currentThread().getName() + " hello world. start"); // 処理開始のログ出力
TimeUnit.SECONDS.sleep(2L); // 2秒待機
logger.info(DateUtil.now() + " " + Thread.currentThread().getName() + " hello world. end"); // 処理終了のログ出力
} catch (Exception e) {
e.printStackTrace();
logger.info(DateUtil.now() + " " + Thread.currentThread().getName() + " hello world. exception end.."); // 例外発生時のログ出力
}
return "Processing result"; // 処理結果を返す
}