Heim >Java >javaLernprogramm >Wie kann ich Jobs im Frühjahr dynamisch planen, ohne sie erneut bereitzustellen?

Wie kann ich Jobs im Frühjahr dynamisch planen, ohne sie erneut bereitzustellen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-29 10:59:10232Durchsuche

How Can I Dynamically Schedule Jobs in Spring Without Redeploying?

Jobs im Frühjahr dynamisch planen

Hintergrund:

Die Spring Scheduling-Bibliothek vereinfacht den Prozess der Planung von Aufgaben in regelmäßigen Abständen mithilfe von Anmerkungen (@Scheduled). Manchmal ist es jedoch erforderlich, die geplante Zeit dynamisch anzupassen, ohne die Anwendung erneut bereitzustellen. Dies kann mit dem Trigger-Mechanismus erreicht werden.

Verwendung eines Triggers:

Mit einem Trigger können Sie die nächste Ausführungszeit einer geplanten Aufgabe im Handumdrehen berechnen. Dieser Ansatz umgeht die Einschränkungen der Verwendung von Anmerkungen für die dynamische Planung. So können Sie es implementieren:

Beispiel:

In diesem Beispiel wird ein benutzerdefinierter Trigger erstellt, um die nächste Ausführungszeit basierend auf einem von erhaltenen Eigenschaftswert dynamisch zu bestimmen die Umgebung.

@Configuration
@EnableScheduling
public class MyAppConfig implements SchedulingConfigurer {

    @Autowired
    Environment env;

    @Bean
    public MyBean myBean() {
        return new MyBean();
    }

    @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().getSchedule();
                    }
                },
                new Trigger() {
                    @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)); // Obtain value programmatically
                        return nextExecutionTime.getTime();
                    }
                }
        );
    }
}

In dieser Konfiguration:

  • Die Environment-Bean wird zum Abrufen der verwendet dynamische myRate-Eigenschaft.
  • Ein Trigger wird definiert, um die nächste Ausführungszeit basierend auf dem abgerufenen Eigenschaftswert zu berechnen.
  • Der ScheduledTaskRegistrar wird verwendet, um die geplante Aufgabe beim dynamischen Trigger zu registrieren.

Durch die Verwendung eines Triggers können Sie die geplante Zeit basierend auf jeder zur Laufzeit verfügbaren Logik oder Werten dynamisch anpassen und so Flexibilität und Kontrolle über die Aufgabe bieten Terminplanung.

Das obige ist der detaillierte Inhalt vonWie kann ich Jobs im Frühjahr dynamisch planen, ohne sie erneut bereitzustellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn