Task Scheduling mit Spring

IFS-Logo Diese Seite ist ein Teil der IsyFact-Standards. Alle Inhalte der Seite, insbesondere Texte und Grafiken, sind urheberrechtlich geschützt. Alle urheberrechtlichen Nutzungs- und Verwertungsrechte liegen beim Bundesverwaltungsamt.

Creative Commons Namensnennung Die Nutzung ist unter den Lizenzbedingungen der Creative Commons Namensnennung 4.0 International gestattet.

Das Task Scheduling mit Spring muss einmalig mit der Annotation @EnableScheduling aktiviert werden, das ist bereits durchgeführt in einer Konfigurationsklasse des Bausteins isy-task. Dadurch wird implizit einer der Spring Scheduler genutzt. Die Geschäftsanwendung zeichnet eine beliebige Methode einer Klasse aus als "durch einen Task auszuführenden Code" durch das Setzen der Annotation @Scheduled. Die Parameter der Annotation legen fest, wie genau Tasks eingeplant und ausgeführt werden.

Listing 1. Beispiele für die Einplanung von Tasks
public class ExampleTasks {

    @Scheduled(fixedDelay = 1000)
    public void scheduleTaskWithFixedDelay() {
        // ...
    }

    @Scheduled(fixedRate = 1000)
    public void scheduleTaskWithFixedRate() {
        // ...
    }

    @Scheduled(fixedDelay = 1000, initialDelay = 1000)
    public void scheduleTaskWithFixedRateAndInitialDelay() {
        // ...
    }

    @Scheduled(cron = "0 15 10 15 * ?")
    public void scheduleTaskWithCronExpression() {
        // ...
    }
}

Der größte Vorteil des Ansatzes von Spring ist die Einfachheit der Verwendung für die Entwicklung. Diesen Vorteil nutzt der Baustein Task Scheduling vollständig aus, indem er sich nahtlos in diesen Ansatz integriert.

1. Erweiterung des Task Scheduling

Der Spring Scheduler stösst die Ausführung des Tasks an. Der Baustein Task Scheduling nutzt Spring AOP und @AspectJ-Annotationen, um vor und nach der Ausführung von Methoden mit der Annotation @Scheduled eigenen Code auszuführen. Hierzu wird ein Around Advice verwendet. Dieser ist dafür zuständig:

  • die integrierten Bausteine der IsyFact zur Ausführung des Tasks zu initialisieren,

  • die eigentliche mit @Scheduled annotierte Methode aufzurufen,

  • Aufräumarbeiten zu erledigen, sodass die Verarbeitung des Tasks sauber beendet werden kann,

  • das Ergebnis der mit @Scheduled annotierten Methode zurückzugeben.

around aspect ablauf.dn
Abbildung 1. Ausführung eines Tasks mit dem Baustein Task Scheduling
Mehr Informationen zu Around Advices (und zu Spring AOP) finden sich in der Dokumentation des Spring Frameworks.

Neben dem Advice gibt es für jeden Task eine eigene Konfiguration sowie eine globale Konfiguration mit Standardwerten für alle Tasks. Hierüber lassen sich die integrierten IsyFact-Bausteine und der Task selbst konfigurieren.

Alle genannten Fähigkeiten des Bausteins Task Scheduling konfigurieren sich per Spring Autokonfiguration selbst, sobald die Bibliothek zum Baustein in eine Anwendung integriert wird. Für die Umsetzung eines Tasks gemäß IsyFact wird somit benötigt:

  • die Einbindung der IsyFact-Bibliothek zum Task Scheduling,

  • eine mit @Scheduled annotierte Methode,

  • eine globale Konfiguration für alle Tasks,

  • (optional) eine Task-spezifische Konfiguration.

2. Einmalig ausgeführte Tasks

Das Task Scheduling von Spring fokussiert sich auf mehrfach ausgeführte Tasks. Einmalig ausgeführte Tasks unterstützt es nicht. Hier springt der Baustein Task Scheduling ein und ermöglicht es, Tasks genau einmal auszuführen, ohne die Vorteile der Integration der IsyFact in das Task Scheduling zu verlieren.

Dazu definiert der Baustein die Annotation @OnceTask. Die Tasks müssen:

  • von Runnable ableiten,

  • die Methode run() mit der Annotation @OnceTask kennzeichnen, und

  • programmatisch im von Spring bereitgestellten Task Scheduler eingeplant werden.

Für diese Tasks gelten dieselben Integrationsvorteile wie für mit @Scheduled geplante Tasks.