私は、トリガーしたいいくつかの他のプロセスのオーケストレーションサービスになるSpring-Bootアプリケーションを持っています。私は現在、データベースから動的にcronを引き出すSpring Schedulingを使用してセットアップしています。私はデータベースから新しいcron情報を引き出すためのプロセスをトリガするための休止メソッドを投げました。このロジックはすべて正しく動作します。唯一の「問題」は、実際の問題になる次のスケジュールされた実行まで新しいcron情報を使用しないことです。 現在のトリガを中断し、更新されたcron情報を使用して再度トリガする方法はありますか?ここは、参照するためのアプリケーションです:次の呼び出しまでの割り込みバネスケジューラータスク
package com.bts.poc;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@SpringBootApplication
@EnableScheduling
@RestController
@RequestMapping("/APSCommon/Scheduling")
public class Application implements SchedulingConfigurer {
@Autowired
private DynamicCron dynamicCron;
@Autowired
PropertyManager propertyManager;
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class);
}
private String cronConfig() {
String cronTabExpression = propertyManager.getProperty("COMPANY", "JOB_NAME","CRON_EXPRESSION");
return cronTabExpression;
}
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
dynamicCron.runJob();
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
String cron = cronConfig();
CronTrigger trigger = new CronTrigger(cron);
Date nextExec = trigger.nextExecutionTime(triggerContext);
DynamicCron.cronExpression = cron;
return nextExec;
}
});
}
@RequestMapping(value = "/reloadScheduling", method = RequestMethod.GET)
public String reloadScheduling() {
PropertyManager.setResetProperties(true);
return "schedules will be altered next run";
}
}
これで問題は解決しますか? http://stackoverflow.com/a/13869342/6737860 –
ScheduledTaskRegistrarを使用してスケジュールするときに、ScheduledFutureを取得できる方法はありません。それをもう少し調べて更新します。 –