Führen Sie geplante Hintergrundaufgaben in Spring aus
1. @Scheduled Annotation
Manchmal brauchen Sie in der Applikation eine Aufgabe, die implizit in der Applikation nach der vorhandenen Prozesse läuft, erstellen. Zum Beispiel die Erstellung der Datei sitemap, die email period schicken,...
@Scheduled ist eine Annotation zur Konfiguration eines Zeitplan (schedule). Sie wird in einer Methode verbindet und diese Methode läuft nach der Zeitplan, die durch @Scheduled konfiguriert wird
@Scheduled
public @interface Scheduled {
String cron() default "";
String zone() default "";
long fixedDelay() default -1;
String fixedDelayString() default "";
long fixedRate() default -1;
String fixedRateString() default "";
long initialDelay() default -1;
String initialDelayString() default "";
}
Das Attribut | Die Bezeichnung |
cron | Ist ein cron Ausdruck, aus der üblichen Ausdruck UN*X verlängert und es enthaltet 6 Felder "die Sekunde, Die Minute, die Stunde, Tag am Monat, der Monat, der Tag der Woche". es hilft bei der Bestimmung eines komplizierten Prozessp. (am Ende des Unterlagen mehr lesen).
|
zone | Eine Zeit-zone benutzt die cron Ausdruck. Nach der Standard ist das Attribut ein leerer String (d.h die lokale Zeit-zone vom Server wird benutzt). |
fixedDelay | Die Implementation der Ausdrücke wird annotiert (annotated). Nach der Erledigung haltet es in einem nach der Milisekunden bestimmten Zeitraum und dann implementiert es die nächsten Aufgabe.
|
fixedDelayString | Die Implementation der Ausdrücke wird annotiert (annotated). Nach der Erledigung haltet es in einem nach der Milisekunde bestimmten Zeitraum und dann implementiert es die nächste Aufgabe.
|
fixedRate | Die Implementation der Ausdrücke wird annotiert (annotated), mit einem bestimmten Zeitraum zwischen die Aufrufe.
|
fixedRateString | Die Implementation der Ausdrücke wird annotiert (annotated), mit einem bestimmten Zeitraum zwischen die Aufrufe.
|
initialDelay | Das Zeitraum nach der Milisekunde haltet vor der ersten Implementation, mit fixedRate() oder fixedDelay() benutzen.
|
initialDelayString | Das Zeitraum nach der Milisekunde haltet vor der ersten Implementation, mit fixedRate() oder fixedDelay() benutzen.
|
2. @EnableScheduling Annotation
Um in einer Spring Applikation die Hintergrund-Aufgabe durchzuführen, sollen Sie sie konfigurieren um durch die Verwendung von @EnableScheduling planen (schedule) zu ermöglichen.
SchedulerConfig.java
package org.o7planning.sbschedule.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
@Configuration
@EnableScheduling
public class SchedulerConfig {
// Declaring the beans are related to the schedule here if necessary.
}
3. fixedDelay & fixedRate
Das ist das einfachste Beispiel, das benutzt @Schedule mit dem Attribute von fixedDelay. Im Beispiel drück die Aufgabe auf dem Bildschirm Console die Zeit aus. Nach der Ende der Aufgabe stoppt sie fixedDelay Sekunde bevor sie die Aufgabe implementiert
WriteCurrentTimeSchedule.java
package org.o7planning.sbschedule.schedule;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class WriteCurrentTimeSchedule {
private static final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss sss");
// initialDelay = 3 second.
// fixedDelay = 2 second.
@Scheduled( initialDelay = 3 * 1000, fixedDelay = 2 * 1000)
public void writeCurrentTime() {
Date now = new Date();
String nowString = df.format(now);
System.out.println("Now is: "+ nowString);
}
}
Sie können die Delay-Zeit für die erste Implementation konfigurieren (initialDelay), Nachdem die Applikation startet (start), wird die Aufgabe auf dem Ende der Delay-Zeit vor der ersten Implementation.
// miliseconds.
@Scheduled(fixedDelay = 2 * 1000, initialDelay = 30 * 1000)
public void writeCurrentTime() {
// Do something ..
}
fixedDelay vs fixedRate
Sie können nur entweder fixedDelay oder fixedRate im @Schedule annotation benutzen, Sie können nicht gleichzeitig die beide benutzen.
- fixedDelay ist die Zeitraum nach der Erledigung von der früheren Aufgabe, danach die Implementation der nächsten Aufgabe.
- fixedRate ist die die Zeitraum zwischen der Implementation der früheren Aufgabe und der Beginn der Implementation der nächsten Aufgabe. Es hängt nicht von der Erledigung der früheren Aufgabe ab
4. Die Ausdrücke von cron und zone
@Schedule erlaubt Sie bei der Einstellung der komplizierten Zeitplan, zum Beispiel: die Erledigung der Aufgabe in allen Montag um 12 Uhr. Um die komplizierten Zeitplan zu erledigen sollen Sie das Attribut cron.
Die Ausdrück cron ist die Vertretung von 6 Felder:
second, minute, hour, day of month, month, day(s) of week
Zum Beispiel
"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-seventeen, and monday to friday
"0 0 0 25 12 ?" // every Christmas Day at midnight
Davon
Das Zeichen | Die Bedeutung |
* | irgendwelcher entspechen |
*/X | alle X |
? | ("keine bestimmte Wert") - es ist nutzlich wenn Sie etwas in einem der 2 Felder (field) bestimmen, davon ein Feld erlaubt und der andere nicht. Zum Beispiel, wenn ich den 10.Tag im Monat, aber sorge nicht welches Tag in der Woche es ist, soll ich "10" im Feld day-of-month setzen und das Zeichen "?" im Feld day-of-week.setzen |
"0 0 0 25 12 ?":
Um 12h Mittelnacht (0 Uhr) am Weihnachten (25th Dezember) sorgen Sie welches Tag es ist
Das zone Attribut bestimmt die Time-Zone. die standardmäßige Wert vom zone ist leer, d.h die Zeit-zone vom Server benutzen.
@Scheduled(cron="0 1 1 * * *", zone="Europe/Istanbul")
public void doScheduledWork() {
// Do something here
}
Die folgende Tabelle bezeichnet die Liste der Zeit-Zone (Time zones), die durch Oracle Real-Time Collaboration unterstützt wird.
Pacific/Pago_Pago | (-11:00) Pago Pago |
Pacific/Honolulu | (-10:00) Hawaii |
America/Anchorage | (-09:00) Alaska |
America/Vancouver | (-08:00) Canada Pacific Time |
America/Los_Angeles | (-08:00) US Pacific Time |
America/Tijuana | (-08:00) Tijuana |
America/Edmonton | (-07:00) Canada Mountain Time |
America/Denver | (-07:00) US Mountain Time |
America/Phoenix | (-07:00) Arizona |
America/Mazatlan | (-07:00) Mazatlan |
America/Winnipeg | (-06:00) Canada Central Time |
America/Regina | (-06:00) Saskatchewan |
America/Chicago | (-06:00) US Central Time |
America/Mexico_City | (-06:00) Mexico City |
America/Guatemala | (-06:00) Guatemala |
America/El_Salvador | (-06:00) El Salvador |
America/Managua | (-06:00) Managua |
America/Costa_Rica | (-06:00) Costa Rica |
America/Montreal | (-05:00) Canada Eastern Time |
America/New_York | (-05:00) US Eastern Time |
America/Indianapolis | (-05:00) East Indiana |
America/Panama | (-05:00) Panama |
America/Bogota | (-05:00) Bogota |
America/Lima | (-05:00) Lima |
America/Halifax | (-04:00) Canada Atlantic Time |
America/Puerto_Rico | (-04:00) Puerto Rico |
America/Caracas | (-04:00) Caracas |
America/Santiago | (-04:00) Santiago |
America/St_Johns | (-03:30) Newfoundland |
America/Sao_Paulo | (-03:00) Sao Paulo |
Atlantic/Azores | (-01:00) Azores |
Etc./UTC | (00:00) Universal Time |
UTC | (00:00) Universal Time |
Atlantic/Reykjavik | (00:00) Reykjavik |
Europe/Dublin | (00:00) Dublin |
Europe/London | (00:00) London |
Europe/Lisbon | (00:00) Lisbon |
Africa/Casablanca | (00:00) Casablanca |
Africa/Nouakchott | (00:00) Nouakchott |
Europe/Oslo | (+01:00) Oslo |
Europe/Stockholm | (+01:00) Stockholm |
Europe/Copenhagen | (+01:00) Copenhagen |
Europe/Berlin | (+01:00) Berlin |
Europe/Amsterdam | (+01:00) Amsterdam |
Europe/Brussels | (+01:00) Brussels |
Europe/Luxembourg | (+01:00) Luxembourg |
Europe/Paris | (+01:00) Paris |
Europe/Zurich | (+01:00) Zurich |
Europe/Madrid | (+01:00) Madrid |
Europe/Rome | (+01:00) Rome |
Africa/Algiers | (+01:00) Algiers |
Africa/Tunis | (+01:00) Tunis |
Europe/Warsaw | (+01:00) Warsaw |
Europe/Prague | (+01:00) Prague Bratislava |
Europe/Vienna | (+01:00) Vienna |
Europe/Budapest | (+01:00) Budapest |
Europe/Sofia | (+02:00) Sofia |
Europe/Istanbul | (+02:00) Istanbul |
Europe/Athens | (+02:00) Athens |
Asia/Nicosia | (+02:00) Nicosia |
Asia/Beirut | (+02:00) Beirut |
Asia/Damascus | (+02:00) Damascus |
Asia/Jerusalem | (+02:00) Jerusalem |
Asia/Amman | (+02:00) Amman |
Africa/Tripoli | (+02:00) Tripoli |
Africa/Cairo | (+02:00) Cairo |
Africa/Johannesburg | (+02:00) Johannesburg |
Europe/Moscow | (+03:00) Moscow |
Asia/Baghdad | (+03:00) Baghdad |
Asia/Kuwait | (+03:00) Kuwait |
Asia/Riyadh | (+03:00) Riyadh |
Asia/Bahrain | (+03:00) Bahrain |
Asia/Qatar | (+03:00) Qatar |
Asia/Aden | (+03:00) Aden |
Africa/Khartoum | (+03:00) Khartoum |
Africa/Djibouti | (+03:00) Djibouti |
Africa/Mogadishu | (+03:00) Mogadishu |
Asia/Dubai | (+04:00) Dubai |
Asia/Muscat | (+04:00) Muscat |
Asia/Yekaterinburg | (+05:00) Yekaterinburg |
Asia/Tashkent | (+05:00) Tashkent |
Asia/Calcutta | (+05:30) India |
Asia/Novosibirsk | (+06:00) Novosibirsk |
Asia/Almaty | (+06:00) Almaty |
Asia/Dacca | (+06:00) Dacca |
Asia/Krasnoyarsk | (+07:00) Krasnoyarsk |
Asia/Bangkok | (+07:00) Bangkok |
Asia/Saigon | (+07:00) Vietnam |
Asia/Jakarta | (+07:00) Jakarta |
Asia/Irkutsk | (+08:00) Irkutsk |
Asia/Shanghai | (+08:00) Beijing, Shanghai |
Asia/Hong_Kong | (+08:00) Hong Kong |
Asia/Taipei | (+08:00) Taipei |
Asia/Kuala_Lumpur | (+08:00) Kuala Lumpur |
Asia/Singapore | (+08:00) Singapore |
Australia/Perth | (+08:00) Perth |
Asia/Yakutsk | (+09:00) Yakutsk |
Asia/Seoul | (+09:00) Seoul |
Asia/Tokyo | (+09:00) Tokyo |
Australia/Darwin | (+09:30) Darwin |
Australia/Adelaide | (+09:30) Adelaide |
Asia/Vladivostok | (+10:00) Vladivostok |
Australia/Brisbane | (+10:00) Brisbane |
Australia/Sydney | (+10:00) Sydney Canberra |
Australia/Hobart | (+10:00) Hobart |
Asia/Magadan | (+11:00) Magadan |
Asia/Kamchatka | (+12:00) Kamchatka |
Pacific/Auckland | (+12:00) Auckland |
Das Beispiel unten: die Aufgabe wird um 1h 20 am Montag, Dienstag, Wochentag und Donnerstag
"0 20 1 * * MON-THU"
CronSchedule.java
package org.o7planning.sbschedule.schedule;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class CronSchedule {
@Scheduled(cron = "0 20 1 * * MON-THU")
public void doSomething() {
System.out.println("Do some thing");
}
}
Anleitungen Spring MVC
- Die Anleitung zum Sping für den Anfänger
- Installieren Sie die Spring Tool Suite für Eclipse
- Die Anleitung zum Sping MVC für den Anfänger - Hello Spring 4 MVC
- Konfigurieren Sie statische Ressourcen in Spring MVC
- Die Anleitung zu Spring MVC Interceptor
- Erstellen Sie eine mehr Sprachen Web-Anwendung mit Spring MVC
- Datei hochladen und herunterladen mit Spring MVC
- Einfache Anmeldung Java Web Application mit Spring MVC, Spring Security und Spring JDBC
- Social Login in Spring MVC mit Spring Social Security
- Die Anleitung zu Spring MVC mit FreeMarker
- Verwenden Sie Template in Spring MVC mit Apache Tiles
- Hướng dẫn sử dụng Spring MVC và Spring JDBC Transaction
- Verwenden Sie in Spring MVC mehrere DataSources
- Die Anleitung zu Spring MVC Form und Hibernate
- Führen Sie geplante Hintergrundaufgaben in Spring aus
- Erstellen Sie eine Java Shopping Cart Web Application mit Spring MVC und Hibernate
- Einfache CRUD Beispiel mit Spring MVC RESTful Web Service
- Stellen Sie Spring MVC auf Oracle WebLogic Server bereit
Show More
Anleitungen Spring Boot
- Installieren Sie die Spring Tool Suite für Eclipse
- Die Anleitung zum Sping für den Anfänger
- Die Anleitung zum Spring Boot für den Anfänger
- Gemeinsame Eigenschaften von Spring Boot
- Die Anleitung zu Spring Boot und Thymeleaf
- Die Anleitung zu Spring Boot und FreeMarker
- Die Anleitung zu Spring Boot und Groovy
- Die Anleitung zu Spring Boot und Mustache
- Die Anleitung zu Spring Boot und JSP
- Die Anleitung zu Spring Boot, Apache Tiles, JSP
- Verwenden Sie Logging im Spring Boot
- Anwendungsüberwachung mit Spring Boot Actuator
- Erstellen Sie eine mehrsprachige Webanwendung mit Spring Boot
- Verwenden Sie im Spring Boot mehrere ViewResolver
- Verwenden Sie Twitter Bootstrap im Spring Boot
- Die Anleitung zu Spring Boot Interceptor
- Die Anleitung zu Spring Boot, Spring JDBC und Spring Transaction
- Die Anleitung zu Spring JDBC
- Die Anleitung zu Spring Boot, JPA und Spring Transaction
- Die Anleitung zu Spring Boot und Spring Data JPA
- Die Anleitung zu Spring Boot, Hibernate und Spring Transaction
- Spring Boot, JPA und H2-Datenbank integrieren
- Die Anleitung zu Spring Boot und MongoDB
- Verwenden Sie mehrere DataSource mit Spring Boot und JPA
- Verwenden Sie mehrere DataSource mit Spring Boot und RoutingDataSource
- Erstellen Sie eine Login-Anwendung mit Spring Boot, Spring Security, Spring JDBC
- Erstellen Sie eine Login-Anwendung mit Spring Boot, Spring Security, JPA
- Erstellen Sie eine Benutzerregistrierungsanwendung mit Spring Boot, Spring Form Validation
- Beispiel für OAuth2 Social Login im Spring Boot
- Führen Sie geplante Hintergrundaufgaben in Spring aus
- CRUD Restful Web Service Beispiel mit Spring Boot
- Beispiel Spring Boot Restful Client mit RestTemplate
- CRUD-Beispiel mit Spring Boot, REST und AngularJS
- Sichere Spring Boot RESTful Service mit Basic Authentication
- Sicherer Spring Boot RESTful Service mit Auth0 JWT
- Beispiel Upload file mit Spring Boot
- Beispiel Download File mit Spring Boot
- Das Beispiel: Spring Boot File Upload mit jQuery Ajax
- Das Beispiel File Upload mit Spring Boot und AngularJS
- Erstellen Sie eine Warenkorb-Webanwendung mit Spring Boot, Hibernate
- Die Anleitung zu Spring Email
- Erstellen Sie eine einfache Chat-Anwendung mit Spring Boot und Websocket
- Stellen Sie die Spring Boot-Anwendung auf Tomcat Server bereit
- Stellen Sie die Spring Boot-Anwendung auf Oracle WebLogic Server bereit
- Installieren Sie ein kostenloses Let's Encrypt SSL-Zertifikat für Spring Boot
- Konfigurieren Sie Spring Boot so, dass HTTP zu HTTPS umgeleitet wird
Show More