Ich habe untersucht, wie Sie die Häufigkeit eines Jobs zur Laufzeit mit Java 8 und Spring ändern können. This question war sehr nützlich, aber es löste mein Problem nicht vollständig.Wie gestartete Task zur Laufzeit mit der EnableScheduling-Annotation im Frühjahr neu gestartet werden?
Ich kann jetzt das Datum konfigurieren, wann der Job als nächstes ausgeführt werden soll. Aber wenn die Verzögerung auf 1 Jahr eingestellt ist, dann muss ich 1 Jahr warten, bevor die neue Konfiguration berücksichtigt wird.
Meine Idee wäre, die geplante Aufgabe zu stoppen, wenn der Konfigurationswert geändert wird (also von einer anderen Klasse). Berechnen Sie dann das nächste Mal, wann die Aufgabe ausgeführt werden soll. Vielleicht gibt es einen einfacheren Weg, dies zu tun.
Hier ist der Code, den ich bisher habe.
@Configuration
@EnableScheduling
public class RequestSchedulerConfig implements SchedulingConfigurer {
@Autowired
SchedulerConfigService schedulerConfigService;
@Bean
public RequestScheduler myBean() {
return new RequestScheduler();
}
@Bean(destroyMethod = "shutdown")
public Executor taskExecutor() {
return Executors.newScheduledThreadPool(100);
}
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(taskExecutor());
taskRegistrar.addTriggerTask(
new Runnable() {
@Override public void run() {
myBean().startReplenishmentComputation();
}
},
new Trigger() {
@Override public Date nextExecutionTime(TriggerContext triggerContext) {
Duration d = schedulerConfigService.getIntervalFromDB();
return DateTime.now().plus(d).toDate();
}
}
);
}
}
Das wäre was ich gerne tun würde.
@RestController
@RequestMapping("/api/config/scheduler")
public class RequestSchedulerController {
@Autowired
ApplicationConfigWrapper applicationConfigWrapper;
@RequestMapping("/set/")
@ResponseBody
public String setRequestSchedulerConfig(@RequestParam(value = "frequency", defaultValue = "") final String frequencyInSeconds){
changeValueInDb(frequencyInSeconds);
myJob.restart();
return "Yeah";
}
}
Hey +1 für Ihre Frage. Sie sind mit dem Frühling vertraut. Oder brauchst du mich, um auch die Federcodierung zu illustrieren? –