Ich habe einen geplanten Job im Frühjahr, ich bekomme seine Cron aus meiner Datenbank. Bei jeder Ausführung wird die nächste Ausführungszeit aktualisiert. Wenn es für die Ausführung alle 10 Minuten konfiguriert ist, kann ich den Wert in die Datenbank ändern, um diesen Job alle 15 Minuten zu planen.Spring Update Scheduler
Das Problem ist, dass ich auf die Ausführung warten muss, um den aktualisierten Cron zu erhalten: Wenn ein Job alle 15 Minuten geplant ist und ich diesen Wert alle 2 Minuten ändern möchte, muss ich auf die nächste Ausführung warten (bis zu 15 Minuten), um diesen Job alle 2 Minuten zu haben.
Gibt es eine Möglichkeit, diesen Job nach dem Aktualisieren der Datenbank neu zu planen?
Ich dachte, diese Bean zu zerstören und zu aktualisieren, aber es funktioniert nicht (vielleicht ist es nicht möglich oder etwas war falsch in meiner Implementierung). Vielleicht gibt es eine Möglichkeit, ein Ereignis auszulösen, um die Methode configureTask auszuführen.
Hier der Ausschnitt meines geplanten Jobs.
@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);
}
});
}
}
fand ich diesen Link, aber es funktioniert nicht .. [http://stackoverflow.com/questions/39152599/interrupt-spring-scheduler-task-before-next-invocation?rq=1] –