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.
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!