Partage de technologie

Écrire des tâches planifiées dans Springboot

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Partie 1 : Introduction

1.1 L'importance des tâches planifiées

Dans le développement de logiciels modernes, les tâches planifiées sont un élément clé de l'automatisation des applications et de l'efficacité opérationnelle. Qu'il s'agisse de sauvegarde de données, de contrôle de l'état du système, de génération régulière de rapports ou de processus automatisés déclenchés par les activités des utilisateurs, les tâches planifiées jouent un rôle indispensable. Ils assurent la continuité de la logique métier et les capacités d'auto-maintenance du système.

1.2 Application des tâches planifiées dans différents domaines
  • Système de planification des ressources d'entreprise (ERP): Les tâches planifiées peuvent être utilisées pour générer des rapports financiers, des mises à jour d'inventaire, etc.
  • Système de gestion de contenu (CMS): Publiez du contenu régulièrement, videz le cache, etc.
  • Système de gestion de la relation client (CRM): Envoyez régulièrement des emails marketing, des rappels de suivi clients, etc.
  • Plateforme de publicité en ligne: Ajuster régulièrement les stratégies publicitaires, optimiser l'affichage publicitaire, etc.
1.3 Défis liés à la mise en œuvre des tâches planifiées traditionnelles

Dans le modèle de développement traditionnel, la mise en œuvre de tâches planifiées nécessite souvent de s'appuyer sur les tâches planifiées du système d'exploitation (telles que la crontab de Linux) ou d'écrire une logique métier complexe. Ces méthodes présentent de nombreux inconvénients :

  • Configuration complexe: Nécessite une compréhension approfondie du planificateur de tâches du système d'exploitation.
  • Difficile à entretenir: Les tâches sont dispersées dans différents systèmes et applications, ce qui rend difficile leur gestion et leur suivi uniformes.
  • Mauvaise évolutivité: À mesure que votre entreprise se développe, l’ajout ou la modification de tâches devient complexe et chronophage.
1.4Solution Spring Boot

En tant que framework Java populaire, Spring Boot offre un moyen plus élégant et intégré d'implémenter des tâches planifiées. Il simplifie la configuration et fournit des API riches, permettant aux développeurs d'intégrer rapidement des fonctions de tâches planifiées dans les applications.

1.5 Prise en charge de Spring Boot pour les tâches planifiées

Spring Boot réussi@EnableSchedulinget@Scheduled Les annotations facilitent extrêmement l'écriture et la configuration de tâches planifiées dans les applications Spring. De plus, Spring Boot fournit également une intégration avec Spring Task Scheduler, qui prend en charge des exigences de tâches planifiées plus avancées.

1.6 Pourquoi choisir Spring Boot pour implémenter des tâches planifiées
  • Simplifier la configuration: Les tâches planifiées peuvent être implémentées via des annotations et une petite quantité de configuration.
  • Facile à intégrer: Parfaitement intégré à l'écosystème Spring, vous pouvez profiter d'autres fonctionnalités Spring telles que la gestion des transactions, l'injection de dépendances, etc.
  • Fort soutien de la communauté: Spring Boot dispose d'une large communauté de développeurs qui fournit de nombreuses ressources et bonnes pratiques.
  • Facile à tester: Les tâches planifiées de Spring Boot facilitent l'exécution de tests unitaires et de tests d'intégration.

Partie 2 : Introduction à Spring Boot

2.1 Présentation du démarrage de Spring

Spring Boot est développé par l'équipe Pivotal (qui fait désormais partie de VMware) et est un framework de développement et de déploiement modulaire et rapide basé sur le framework Spring. Il vise à simplifier le processus de configuration et de développement initial des applications Spring et à réduire le travail de configuration des développeurs en fournissant une série de configurations par défaut.

2.2 Fonctionnalités principales de Spring Boot
  • configuration automatique: Spring Boot peut configurer automatiquement les applications Spring en fonction des dépendances du projet.
  • Fonctionner de manière indépendante: Les applications Spring Boot incluent des serveurs HTTP intégrés (tels que Tomcat, Jetty ou Undertow) et n'ont pas besoin d'être déployées sur des serveurs externes.
  • Aucune configuration XML requise: Spring Boot ne nécessite pas l'utilisation de fichiers de configuration XML, bien qu'il prenne toujours en charge la configuration XML.
  • Prise en charge des microservices: Spring Boot est très adapté à l'architecture de microservices et est facile à créer, à déployer et à développer.
2.3 Mécanisme de démarrage de Spring Boot

L'application Spring Boot est démarrée viaSpringApplication.run() Méthode implémentée, elle créera et configurera automatiquement le contexte de l'application Spring. Spring Boot fournit également une interface de ligne de commande (CLI) et un point de terminaison Actuator pour surveiller et gérer les applications.

2.4 Gestion des dépendances Spring Boot

Spring Boot réussispring-boot-starter-parent Fournit une gestion des dépendances et simplifie la configuration des projets Maven et Gradle. Il prédéfinit les numéros de version et les plages de dépendances, ce qui facilite la gestion des conflits de dépendances et du contrôle des versions.

2.5 Communauté Spring Boot et écologie des plug-ins

Spring Boot dispose d'une communauté open source active qui fournit un grand nombre de plugins et de « démarreurs » contenant les dépendances nécessaires pour créer des fonctionnalités spécifiques, telles quespring-boot-starter-webPour créer des applications RESTful.

2.6 Exemple : créer une application Spring Boot simple

Vous trouverez ci-dessous les étapes pour créer une application Spring Boot simple et l'exemple de code correspondant :

  1. Créer une structure de projet: Utilisez Spring Initializr (https://start.spring.io/) pour générer rapidement la structure du projet.
  2. Ajouter des dépendances: Sélectionnez les démarreurs souhaités, par exemplespring-boot-starter-web
  3. Écrire la classe d'application principale
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class MyApp {
        public static void main(String[] args) {
            SpringApplication.run(MyApp.class, args);
        }
    }
    
  4. Créer un contrôleur REST
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class MyController {
        @GetMapping("/")
        public String home() {
            return "Hello, Spring Boot!";
        }
    }
    
2.7 Méthode de déploiement de Spring Boot
  • Emballé en JAR : L'application Spring Boot peut être regroupée dans un fichier JAR exécutable viajava -jarLa commande s'exécute.
  • Déploiement conteneurisé: Les applications Spring Boot sont bien adaptées aux technologies de conteneurisation telles que Docker et sont faciles à déployer dans des environnements cloud.
2.8 Relation entre Spring Boot et Spring Framework

Spring Boot ne remplace pas Spring Framework, mais une méthode de développement rapide basée sur Spring Framework. Il fournit un moyen rapide de démarrer des applications Spring tout en conservant toutes les fonctionnalités et la flexibilité de Spring Framework.

2.9 Pourquoi choisir Spring Boot ?
  • développement rapide: La configuration automatique et la configuration simplifiée de Spring Boot accélèrent le développement.
  • Facile à déployer: Le serveur HTTP intégré et la prise en charge de la conteneurisation simplifient le déploiement.
  • soutien communautaire: La communauté Spring Boot fournit une multitude de ressources, de plug-ins et de bonnes pratiques.
2.10 Conclusion

Spring Boot est un framework conçu pour le développement Java moderne. Il simplifie la configuration et fournit une série de fonctions prêtes à l'emploi, permettant aux développeurs de se concentrer sur la mise en œuvre de la logique métier plutôt que sur la construction d'une infrastructure. Dans les chapitres suivants, nous approfondirons l'application de Spring Boot dans les tâches planifiées et montrerons comment utiliser ses fonctionnalités pour créer des tâches automatisées efficaces et fiables.

Partie 3 : Concepts de base des tâches planifiées

3.1 Définition des tâches planifiées

Une tâche planifiée est un morceau de code ou un programme exécuté automatiquement à une heure prédéterminée. Ils peuvent être ponctuels ou périodiques et sont utilisés pour effectuer des tâches automatisées telles que la sauvegarde des données, l'envoi de notifications, la réalisation de contrôles programmés, etc.

3.2 Types de tâches planifiées
  • tâches ponctuelles: exécuté une seule fois, généralement pour des opérations d'initialisation ou de nettoyage spécifiques.
  • tâches périodiques: exécuté de manière répétée à un certain intervalle de temps, qui peut être un intervalle fixe ou une heure basée sur un calendrier.
3.3 Scénarios d'application des tâches planifiées
  • sauvegarde de données: Sauvegardez régulièrement la base de données pour garantir la sécurité des données.
  • Génération de rapports: Générez régulièrement des rapports d'activité pour aider à la prise de décision.
  • Surveillance du système: Vérifiez périodiquement l'état du système pour découvrir et résoudre les problèmes en temps opportun.
  • Notification utilisateur: envoyez des rappels ou des notifications en fonction du comportement de l'utilisateur ou d'événements spécifiques.
3.4 L'importance des tâches planifiées

Les tâches planifiées sont essentielles pour maintenir votre système opérationnel et automatiser les processus métier. Ils peuvent réduire les interventions manuelles, augmenter l’efficacité et garantir la rapidité et l’exactitude des tâches.

3.5 Défis liés à la mise en œuvre des tâches planifiées
  • précision du temps: S'assurer que les tâches sont exécutées avec précision à l'heure prévue.
  • La gestion des erreurs: Gérer correctement les erreurs pouvant survenir lors de l’exécution.
  • La gestion des ressources: allouez raisonnablement les ressources pour éviter tout impact sur les performances du système lors de l'exécution des tâches.
3.6 Comment mettre en œuvre des tâches planifiées
  • niveau du système d'exploitation: Utilisez crontab ou le Planificateur de tâches Windows.
  • niveau de langage de programmation : utilisez une bibliothèque ou un framework spécifique au langage, tel que Javajava.util.Timer
  • Niveau du cadre d'application: Utilisez la prise en charge des tâches planifiées fournies par le framework, comme Spring@Scheduled
3.7 Exemple : utilisation de Javajava.util.TimerMettre en œuvre des tâches planifiées

Voici un exemple utilisant la bibliothèque standard JavaTimerExemple de tâche planifiée simple implémentée par classe :

import java.util.Timer;
import java.util.TimerTask;

public class SimpleTimerTask {
    public static void main(String[] args) {
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                System.out.println("执行定时任务:"   System.currentTimeMillis());
            }
        };
        Timer timer = new Timer();
        long delay = 0;
        long intervalPeriod = 1000; // 间隔1秒执行一次
        timer.scheduleAtFixedRate(task, delay, intervalPeriod);
    }
}
3.8 Exemple : Utilisation d'expressions cron

Les expressions Cron constituent un moyen puissant de configurer le temps d'exécution des tâches planifiées. Voici un exemple d'expression cron pour exécuter une tâche tous les jours à 1 heure du matin :

0 0 1 * * ?
3.9 Tâches planifiées dans Spring Boot

Spring Boot réussi@Scheduled Les annotations simplifient la configuration et la mise en œuvre des tâches planifiées.Voici une utilisation@ScheduledExemple de tâche planifiée Spring Boot annotée :

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ScheduledTasks {
    
    @Scheduled(fixedRate = 5000) // 每5秒执行一次
    public void reportCurrentTime() {
        System.out.println("当前时间:"   System.currentTimeMillis());
    }
    
    @Scheduled(cron = "0 0 1 * * ?") // 每天凌晨1点执行
    public void scheduleTask() {
        System.out.println("执行定时任务:"   System.currentTimeMillis());
    }
}
3.10 Suivi et gestion des tâches planifiées
  • enregistrement: Enregistrer l'exécution des tâches pour faciliter le suivi des problèmes et le suivi des performances.
  • Examen de santé: Vérifiez régulièrement l’état de santé des tâches planifiées pour vous assurer qu’elles s’exécutent normalement.

Partie 4 : Implémentation des tâches de synchronisation dans Spring Boot

4.1 Utilisation@Scheduledannotation

@Scheduled Il s'agit d'une annotation fournie par Spring pour simplifier la mise en œuvre des tâches planifiées. Il vous permet de créer des méthodes exécutées périodiquement grâce à une simple configuration d'annotations.

4.2 @ScheduledConfiguration des annotations
  • fixedRate: Spécifiez un intervalle de temps fixe (en millisecondes) entre deux exécutions de tâches.
  • fixedDelay: Spécifiez un intervalle de temps fixe entre la fin de la dernière exécution de la tâche et le début de la tâche suivante.
  • initialDelay: Spécifiez le délai avant que la tâche soit exécutée pour la première fois.
  • cron: utilisez des expressions cron pour spécifier le calendrier d'exécution des tâches.
4.3 Exemple : UtilisationfixedRate

L'exemple suivant montre une méthode qui s'exécute toutes les 5 secondes :

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class FixedRateTask {

    @Scheduled(fixedRate = 5000)
    public void taskWithFixedRate() {
        System.out.println("任务执行:"   LocalDateTime.now());
    }
}
4.4 Exemple : UtilisationfixedDelay

L'exemple suivant montre une méthode exécutée 1 seconde après la fin de l'exécution de la tâche précédente :

@Scheduled(fixedDelay = 1000)
public void taskWithFixedDelay() {
    System.out.println("任务执行:"   LocalDateTime.now());
}
4.5 Exemple : utilisationinitialDelay

L'exemple suivant montre une méthode exécutée 10 secondes après le démarrage de l'application, puis toutes les 5 secondes :

@Scheduled(initialDelay = 10000, fixedRate = 5000)
public void taskWithInitialDelay() {
    System.out.println("任务执行:"   LocalDateTime.now());
}
4.6 Utilisation des expressions cron

Les expressions Cron fournissent des paramètres de temps plus complexes, vous permettant de spécifier des temps d'exécution spécifiques. L'exemple suivant montre une méthode exécutée tous les jours à 1 heure du matin :

@Scheduled(cron = "0 0 1 * * ?")
public void taskWithCronExpression() {
    System.out.println("任务执行:"   LocalDateTime.now());
}
4.7 Gestion des exceptions d'exécution des tâches

Les tâches planifiées peuvent générer des exceptions, fournit Spring@Asyncannotation pour effectuer des tâches de manière asynchrone et utiliser@ExceptionHandlerpour gérer les exceptions.

@Async
@Scheduled(cron = "0 0/30 * * * ?")
public void taskWithExceptionHandling() {
    if (Math.random()