Heim >Java >javaLernprogramm >Wie kann man im Frühjahr dynamisch einen Festpreis für geplante Aufträge festlegen?

Wie kann man im Frühjahr dynamisch einen Festpreis für geplante Aufträge festlegen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-05 16:25:12720Durchsuche

How to Dynamically Set a Fixed Rate for Scheduled Jobs in Spring?

Jobs programmgesteuert mit Spring planen: So legen Sie eine dynamische feste Rate fest

Das Spring Framework bietet eine bequeme Möglichkeit, Jobs mithilfe von @Scheduled zu planen Anmerkung. Wenn jedoch die gewünschte Ausführungsrate angepasst werden muss, ohne die Anwendung erneut bereitzustellen, ist ein dynamischerer Ansatz erforderlich.

Um dies zu überwinden, ermöglicht Spring die Verwendung eines Triggers anstelle von Anmerkungen. Ein Trigger ermöglicht die dynamische Berechnung der nächsten Ausführungszeit.

Die Implementierung dieser dynamischen Planung umfasst einige wichtige Schritte:

  1. Erstellen eines Triggers:Implementieren einer Klasse das die Trigger-Schnittstelle erweitert und eine Implementierung für die nextExecutionTime()-Methode bereitstellt. Diese Methode berechnet die nächste Ausführungszeit basierend auf der erforderlichen Logik, z. B. dem programmgesteuerten Abrufen eines Werts.
  2. Konfigurieren des Schedulers: Verwenden Sie die Schnittstelle SchedulingConfigurer in einer Spring-Konfigurationsklasse, um den Scheduler einzurichten . Dazu gehört das Erstellen einer Executor-Bean und das Registrieren einer Trigger-Aufgabe bei Ihrer benutzerdefinierten Trigger-Implementierung.
  3. Planen des Jobs: Planen Sie den Job mithilfe eines Runnable, das die gewünschte Aufgabe ausführt. Die Trigger-Aufgabe übernimmt die Ausführungsplanung basierend auf Ihrem benutzerdefinierten Trigger.

Hier ist ein Beispiel dafür, wie dieser Ansatz im Code implementiert werden kann:

@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)); //you can get the value from wherever you want
                        return nextExecutionTime.getTime();
                    }
                }
        );
    }
}

Mit diesem Ansatz können Sie Erhalten Sie die Flexibilität, die Planungsrate dynamisch anzupassen, ohne Ihre Spring-Anwendung erneut bereitstellen zu müssen. Die programmgesteuert ermittelte Ausführungsrate ermöglicht erweiterte Planungsszenarien und Integrationen mit externen Systemen.

Das obige ist der detaillierte Inhalt vonWie kann man im Frühjahr dynamisch einen Festpreis für geplante Aufträge festlegen?. 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