Heim  >  Artikel  >  Java  >  Von SpringBoot geplante Aufgaben

Von SpringBoot geplante Aufgaben

(*-*)浩
(*-*)浩nach vorne
2019-10-16 16:39:232138Durchsuche

Im Verlauf unserer eigentlichen Entwicklungsprojekte benötigen wir häufig geplante Aufgaben, die uns bei einigen Dingen helfen, z. B. das stündliche Zählen der Anzahl neu registrierter Benutzer, das Bereinigen des Servercaches jeden Tag um 1 Uhr morgens und das Zählen der Anzahl Anzahl der gekauften Mitglieder jeden Freitag. Anzahl der Benutzer usw.

Von SpringBoot geplante Aufgaben

Nach Version 2.0 bietet SpringBoot eine sehr praktische Annotationsmethode zum Schreiben geplanter Aufgabenprogramme, ohne Konfigurationsdateien und Abhängigkeiten hinzuzufügen. Die Annotation lautet wie folgt folgt:

@SpringBootApplication
@EnableScheduling
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

@EnableScheduling: Unterstützung für geplante Aufgaben aktivieren

Annotationsmethode – einzelner Thread

Erstellen Sie die Klasse SchedulerTask1 und speichern Sie sie unter der Aufgabe Paket:

@Component
public class SchedulerTask1 {

    @Scheduled(cron = "*/6 * * * * ?")
    private void process(){
        System.out.println("SchedulerTask1 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName());
    }
}

SchedulerTask2-Klassenspeicher und Aufgabenpaket erstellen:

@Component
public class SchedulerTask2 {
    @Scheduled(fixedRate  = 3000)
    private void process(){
        System.out.println("SchedulerTask2 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName());
    }
}

@Scheduled-Parameter kann zwei Timing-Einstellungen akzeptieren, eine davon ist unser häufig verwendetes cron="*/6 * * * * ?" , einer ist „fixedRate = 3000“, beides bedeutet, dass der Inhalt alle X Sekunden gedruckt wird.

fixedRate-Beschreibung

@Scheduled(fixedRate = 3000): 3 Sekunden nach dem letzten Ausführungszeitpunkt ausführen

@Scheduled(fixedDelay = 3000) : 3 Sekunden nach dem letzten Ausführungszeitpunkt ausführen

@Scheduled(initialDelay=1000, FixedRate=6000): Nach der ersten Verzögerung von 1 Sekunde ausführen, dann

fixedRate drücken Die Regel lautet alle 6 Sekunden ausgeführt

Cron-Ausdrucksparameter stellen jeweils Folgendes dar:

Sekunden (0~59) Beispielsweise bedeutet 0/5 alle 5 Sekunden

Minute (0~59)

Stunde (0~23)

Tag (0~31), muss berechnet werden

Monat (0~11)

Wochentag (kann 1-7 oder SO/MON/DI/MI/DO/FR/SA ausgefüllt werden)

Starten Sie das Projekt, die Ausführungsergebnisse sind wie folgt:

SchedulerTask2 : 21:36:47.795008800
线程 : scheduling-1
SchedulerTask1 : 21:36:48.014888600
线程 : scheduling-1
SchedulerTask2 : 21:36:50.792887400
线程 : scheduling-1
SchedulerTask2 : 21:36:53.792697900
线程 : scheduling-1
SchedulerTask1 : 21:36:54.002684700
线程 : scheduling-1
SchedulerTask2 : 21:36:56.792517700
线程 : scheduling-1
SchedulerTask2 : 21:36:59.792606400
线程 : scheduling-1
SchedulerTask1 : 21:37:00.002598400
线程 : scheduling-1
SchedulerTask2 : 21:37:02.792423300
线程 : scheduling-1
SchedulerTask2 : 21:37:05.802238
线程 : scheduling-1
SchedulerTask1 : 21:37:06.002225200
线程 : scheduling-1

Sie können sehen, dass bei gleichzeitiger Ausführung der beiden oben genannten geplanten Aufgaben derselbe Thread verwendet wird: Scheduling-1, und die Ausführungszeit der Aufgabe wird durch die Ausführungszeit beeinflusst der vorherigen Aufgabe.

Annotationsmethode – Multithreading

Erstellen Sie eine neue MultithreadScheduleTask-Klasse und speichern Sie sie unter dem Aufgabenpaket:

@Component
@EnableAsync
public class MultithreadScheduleTask {

    @Async
    @Scheduled(fixedDelay = 1000)
    public void first() throws InterruptedException {
        System.out.println("第一个定时任务开始 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName());
        Thread.sleep(1000 * 10);
    }

    @Async
    @Scheduled(fixedDelay = 2000)
    public void second() {
        System.out.println("第二个定时任务开始 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName());
        System.out.println();
    }

}

@EnableAsync: Aktivieren Sie Multithreading

Starten Sie das Projekt und die laufenden Ergebnisse sind wie folgt:

第一个定时任务开始 : 21:48:47.121991300
线程 : task-1
第二个定时任务开始 : 21:48:47.121991300
线程 : task-2

第一个定时任务开始 : 21:48:48.121930600
线程 : task-3
第二个定时任务开始 : 21:48:49.114640
线程 : task-4

第一个定时任务开始 : 21:48:49.114640
线程 : task-5
第一个定时任务开始 : 21:48:50.119792400
线程 : task-6
第二个定时任务开始 : 21:48:51.119726900
线程 : task-7

第一个定时任务开始 : 21:48:51.129727800
线程 : task-8
第一个定时任务开始 : 21:48:52.130157200
线程 : task-2
第二个定时任务开始 : 21:48:53.120096500
线程 : task-4

第一个定时任务开始 : 21:48:53.140095
线程 : task-7
第一个定时任务开始 : 21:48:54.140429600
线程 : task-4
第二个定时任务开始 : 21:48:57.130710
线程 : task-1

Das obige ist der detaillierte Inhalt vonVon SpringBoot geplante Aufgaben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen