私は春に予定された仕事をしています。私は自分のデータベースからそのcronを取得します。 実行するたびに、次の実行時間が更新されます。したがって、10分ごとに実行するように設定されている場合は、その値をデータベースに変更して15分ごとにそのジョブをスケジュールすることができます。春更新スケジューラ
問題は、更新されたcronが実行されるのを待たなければならないということです。ジョブが15分ごとにスケジュールされ、2分ごとにこの値を変更したい場合、次の実行を待たなければなりません(最大15分)、2分ごとにこのジョブを実行します。
データベースを更新した後にこのジョブを再スケジュールする方法はありますか?
私はこのBeanを破棄してリフレッシュすると思っていましたが、動作していません(おそらく実装できませんでした。おそらく、メソッドconfigureTaskを実行するイベントをトリガする方法があります。
私のスケジュールされたジョブのスニペットです。
@EnableScheduling
@Component
public class MyClass implements SchedulingConfigurer {
private static final String JOB = "My personal task";
@Autowired
JobRepository jobRepository;
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
System.out.println("Hello World!");
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
JobScheduled byJobNameIgnoreCase = jobRepository.findByJobNameIgnoreCase(JOB); // read from database
String cron = byJobNameIgnoreCase.getCrontab();
CronTrigger trigger = new CronTrigger(cron);
return trigger.nextExecutionTime(triggerContext);
}
});
}
}
私は、このリンクを見つけたが、それは動作していない.. [http://stackoverflow.com/questions/39152599/interrupt-spring-scheduler-task-before-next-invocation?rq=1] –