codestory

Führen Sie geplante Hintergrundaufgaben in Spring aus

  1. @Scheduled Annotation
  2. @EnableScheduling Annotation
  3. fixedDelay & fixedRate
  4. Die Ausdrücke von cron und zone

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).
  • @return gibt eine cron Ausdruck rück und enthaltet die Zeitplan
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.
  • @return die Delay-Zeit nach der Milisekunde.
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.
  • @return die Delay-zeit nach der Milisekunde
fixedRate
Die Implementation der Ausdrücke wird annotiert (annotated), mit einem bestimmten Zeitraum zwischen die Aufrufe.
  • @return das bestimmte Zeitraum zwischen die Aufrufe nach der Milisekunde
fixedRateString
Die Implementation der Ausdrücke wird annotiert (annotated), mit einem bestimmten Zeitraum zwischen die Aufrufe.
  • @return das bestimmte Zeitraum zwischen die Aufrufe nach der Milisekundeals eine String Wert
initialDelay
Das Zeitraum nach der Milisekunde haltet vor der ersten Implementation, mit fixedRate() oder fixedDelay() benutzen.
  • @return gibt die initalDelay für die erste Aufruf
initialDelayString
Das Zeitraum nach der Milisekunde haltet vor der ersten Implementation, mit fixedRate() oder fixedDelay() benutzen.
  • @return gibt die initalDelay für die erste Aufruf als eine String Wert

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

Show More

Anleitungen Spring Boot

Show More