Dans le processus de nos projets de développement actuels, nous avons souvent besoin de tâches planifiées pour nous aider à faire certaines choses, comme compter le nombre d'utilisateurs nouvellement enregistrés toutes les heures, nettoyer le cache du serveur à 1 heure du matin chaque jour et compter le nombre de membres achetés chaque vendredi. Nombre d'utilisateurs, etc.
Après la version 2.0, SpringBoot fournit une méthode d'annotation très pratique pour écrire des programmes de tâches planifiées sans ajouter de fichiers de configuration ni de dépendances. Créez rapidement un projet SpringBoot en ajoutant L'annotation est comme. suit :
@SpringBootApplication @EnableScheduling public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
@EnableScheduling : Activer la prise en charge des tâches planifiées
Méthode d'annotation - thread unique
Créez la classe SchedulerTask1 et stockez-la sous la tâche package :
@Component public class SchedulerTask1 { @Scheduled(cron = "*/6 * * * * ?") private void process(){ System.out.println("SchedulerTask1 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName()); } }
Créer un stockage de classe SchedulerTask2 et un package de tâches :
@Component public class SchedulerTask2 { @Scheduled(fixedRate = 3000) private void process(){ System.out.println("SchedulerTask2 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName()); } }
Le paramètre @Scheduled peut accepter deux paramètres de synchronisation, l'un étant notre cron="*/6 * * * * ?" , l'un est fixRate = 3000, les deux signifient imprimer du contenu toutes les X secondes.
fixedRate Description
@Scheduled(fixedRate = 3000) : exécuter 3 secondes après le dernier point temporel d'exécution
@Scheduled(fixedDelay = 3000) : Exécuter 3 secondes après le dernier délai d'exécution
@Scheduled(initialDelay=1000,fixedRate=6000) : Exécuter après le premier délai de 1 seconde, puis appuyer sur
fixedRate La règle est exécutée toutes les 6 secondes
Les paramètres de l'expression Cron représentent respectivement :
secondes (0~59) Par exemple, 0/5 signifie toutes les 5 secondes
Minute (0~59)
Heure (0~23)
Jour (0~31), besoin de calculer
mois (0~11)
Jour de la semaine (peut être renseigné 1-7 ou SUN/MON/TUE/WED/JEU/FRI/SAT)
Démarrez le projet, les résultats d'exécution sont les suivants :
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
Vous pouvez voir que lorsque les deux tâches planifiées ci-dessus sont exécutées en même temps, le même thread est utilisé : scheduling-1, et le temps d'exécution de la tâche sera affecté par le temps d'exécution de la tâche précédente.
Méthode d'annotation - multi-threading
Créez une nouvelle classe MultithreadScheduleTask et stockez-la sous le package de tâches :
@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 : Activer le multi-threading
Démarrez le projet et les résultats en cours d'exécution sont les suivants :
第一个定时任务开始 : 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
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!