Jobs mit benutzerdefinierten Festpreisen mit Spring planen
Spring bietet eine praktische Möglichkeit, Jobs mithilfe von Anmerkungen zu planen. Allerdings kann es manchmal erforderlich sein, den Festpreis dynamisch festzulegen. Dieser Artikel stellt eine Lösung vor, die den Trigger-Mechanismus von Spring verwendet.
Aktueller annotationsbasierter Ansatz
Standardmäßig können Sie @Scheduled mit FixedRate verwenden, um den Zeitraum zwischen Ausführungen anzugeben. Diese Rate ist jedoch statisch und kann nicht geändert werden, ohne die Anwendung erneut bereitzustellen.
Lösung: Verwenden eines Triggers
Anstatt sich auf Anmerkungen zu verlassen, können Sie einen benutzerdefinierten Trigger konfigurieren das die nächste Ausführungszeit basierend auf einem dynamisch berechneten Wert berechnet. So können Sie das erreichen:
1. Implementieren Sie eine Scheduling-Konfiguration
Erstellen Sie eine Konfigurationsklasse, die der SchedulingConfigurer-Schnittstelle folgt. Diese Klasse überschreibt den Standardplaner und registriert Ihren benutzerdefinierten Auslöser.
@Configuration @EnableScheduling public class MyAppConfig implements SchedulingConfigurer { // ... }
2. Definieren Sie einen Trigger
Implementieren Sie einen Trigger, der die nächste Ausführungszeit zurückgibt. In diesem Beispiel berechnen wir das nächste Mal basierend auf der in Ihrer Umgebung gespeicherten myRate-Eigenschaft.
@Override public Date nextExecutionTime(TriggerContext triggerContext) { Calendar nextExecutionTime = new GregorianCalendar(); Date lastActualExecutionTime = triggerContext.lastActualExecutionTime(); nextExecutionTime.setTime(lastActualExecutionTime != null ? lastActualExecutionTime : new Date()); nextExecutionTime.add(Calendar.MILLISECOND, env.getProperty("myRate", Integer.class)); //you can get the value from wherever you want return nextExecutionTime.getTime(); }
3. Registrieren Sie den Auslöser
Registrieren Sie in Ihrer Planungskonfigurationsklasse den Auslöser für Ihre Aufgabe.
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { // ... taskRegistrar.addTriggerTask( new Runnable() { @Override public void run() { myBean().getSchedule(); } }, new Trigger() { // ... (Your trigger implementation) } ); }
Mit diesem Ansatz können Sie die feste Rate für Ihre geplanten Jobs dynamisch festlegen , sodass Sie es anpassen können, ohne Ihre Anwendung erneut bereitzustellen.
Das obige ist der detaillierte Inhalt vonWie kann ich Jobs mit dynamisch anpassbaren Festpreisen im Frühjahr einplanen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!