spring
Task-Ausführung und Zeitplanung
Suche…
Aktivieren Sie die Zeitplanung
Spring bietet eine nützliche Unterstützung bei der Aufgabenplanung. Um es zu aktivieren, kommentieren Sie einfach Ihre @Configuration
Klassen mit @EnableScheduling
:
@Configuration
@EnableScheduling
public class MyConfig {
// Here it goes your configuration
}
Feste Verzögerung
Wenn nach einiger Zeit Code ausgeführt werden soll, nachdem die Ausführung abgeschlossen wurde, sollten Sie eine feste Verzögerung (in Millisekunden) verwenden:
@Component
public class MyScheduler{
@Scheduled(fixedDelay=5000)
public void doSomething() {
// this will execute periodically, after the one before finishes
}
}
Fester Zinssatz
Wenn etwas periodisch ausgeführt werden soll, wird dieser Code einmal pro angegebenem Wert in Millisekunden ausgelöst:
@Component
public class MyScheduler{
@Scheduled(fixedRate=5000)
public void doSomething() {
// this will execute periodically
}
}
Cron Ausdruck
Ein Cron-Ausdruck besteht aus sechs aufeinander folgenden Feldern -
second, minute, hour, day of month, month, day(s) of week
und wird wie folgt erklärt
@Scheduled(cron = "* * * * * *")
Wir können die Zeitzone auch als - einstellen.
@Scheduled(cron="* * * * * *", zone="Europe/Istanbul")
Anmerkungen: -
syntax means example explanation
------------------------------------------------------------------------------------
* match any "* * * * * *" do always
*/x every x "*/5 * * * * *" do every five seconds
? no specification "0 0 0 25 12 ?" do every Christmas Day
Beispiel: -
syntax means
------------------------------------------------------------------------------------
"0 0 * * * *" the top of every hour of every day.
"*/10 * * * * *" every ten seconds.
"0 0 8-10 * * *" 8, 9 and 10 o'clock of every day.
"0 0/30 8-10 * * *" 8:00, 8:30, 9:00, 9:30 and 10 o'clock every day.
"0 0 9-17 * * MON-FRI" on the hour nine-to-five weekdays
"0 0 0 25 12 ?" every Christmas Day at midnight
Eine mit @Scheduled()
deklarierte Methode wird für jeden übereinstimmenden Fall explizit aufgerufen.
Wenn ein Code ausgeführt werden soll, wenn ein cron-Ausdruck erfüllt ist, müssen wir ihn in der Annotation angeben:
@Component
public class MyScheduler{
@Scheduled(cron="*/5 * * * * MON-FRI")
public void doSomething() {
// this will execute on weekdays
}
}
Wenn wir die aktuelle Uhrzeit alle 5 Sekunden in unserer Konsole drucken möchten -
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
@Component
public class Scheduler {
private static final Logger log = LoggerFactory.getLogger(Scheduler.class);
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(cron = "*/5 * * * * *")
public void currentTime() {
log.info("Current Time = {}", dateFormat.format(new Date()));
}
}
Beispiel mit XML-Konfiguration:
Beispielklasse:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
@Component("schedulerBean")
public class Scheduler {
private static final Logger log = LoggerFactory.getLogger(Scheduler.class);
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
public void currentTime() {
log.info("Current Time = {}", dateFormat.format(new Date()));
}
}
Beispiel-XML (task-context.xml):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-4.1.xsd">
<task:scheduled-tasks scheduler="scheduledTasks">
<task:scheduled ref="schedulerBean" method="currentTime" cron="*/5 * * * * MON-FRI" />
</task:scheduled-tasks>
<task:scheduler id="scheduledTasks" />
</beans>