Maison > Java > javaDidacticiel > Tâches planifiées par SpringBoot

Tâches planifiées par SpringBoot

(*-*)浩
Libérer: 2019-10-16 16:39:23
avant
2161 Les gens l'ont consulté

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.

Tâches planifiées par SpringBoot

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);
    }
}
Copier après la connexion

@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());
    }
}
Copier après la connexion

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());
    }
}
Copier après la connexion

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
Copier après la connexion

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();
    }

}
Copier après la connexion

@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
Copier après la connexion

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!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal