Gestion des Tâches Batch avec Spring Cloud Task dans Spring Boot

Dans une architecture de microservices, la gestion des traitements par lots (batch processing) est une exigence courante, souvent utilisée pour des opérations planifiées ou récurrentes. Spring Cloud Task offre une solution élégante pour intégrer ces capacités dans des applications Spring Boot, facilitant ainsi la création, l'exécution, la surveillance et la journalisation des tâches.

Présentation de Spring Cloud Task

Spring Cloud Task est un framework développé par l'équipe Spring visant à simplifier le développement et l'exploitation des traitements par lots. Il fournit une intégration fluide pour le lancement, l'exécution et la plateforme de gestion des tâches.

Ajout de la Dépendance

Commencez par ajouter la dépendance Spring Cloud Task à votre projet Spring Boot.


<!-- pom.xml -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-task</artifactId>
</dependency>

Définition d'une Tâche

Utilisez l'annotation @EnableTask pour activer les fonctionnalités de gestion des tâches et définissez votre classe de tâche.


import org.springframework.cloud.task.annotation.EnableTask;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

Exécution Simple d'une Tâche

Créez une classe pour exécuter votre tâche, en utilisant l'annotation @TaskExecutor pour marquer la méthode principale de la tâche.


import org.springframework.cloud.task.listener.annotation.TaskExecutor;
import org.springframework.stereotype.Component;

@Component
public class MyBatchTask {

    @TaskExecutor
    public void processBatch() {
        // Logique d'exécution de la tâche batch ici
        System.out.println("Exécution de la tâche batch...");
    }
}

Configuration des Propriétés de la Tâche

Configurez les propriétés de la tâche, comme l'intervalle d'exécution, dans le fichier application.properties.


# Désactive la fermeture automatique du contexte Spring à la fin de la tâche
spring.cloud.task.closecontext.enabled=false
# Définit un délai fixe de 10 secondes entre les exécutions de tâches
spring.cloud.task.scheduler.fixed-delay=10000

Lancement des Tâches

Spring Cloud Task permet de lancer des tâches directement via la ligne de commande.


java -jar votre-application-de-tache.jar

Écouteurs de Tâches

Utilisez des écouteurs pour surveiller le statut d'exécution des tâches.


import org.springframework.cloud.task.listener.annotation.BeforeTask;
import org.springframework.cloud.task.listener.annotation.AfterTask;
import org.springframework.stereotype.Component;
import org.springframework.cloud.task.listener.TaskExecutionException;

@Component
public class TaskLifecycleListener {

    @BeforeTask
    public void onTaskStart() {
        System.out.println("Début d'exécution de la tâche...");
    }

    @AfterTask
    public void onTaskEnd() {
        System.out.println("Fin d'exécution de la tâche.");
    }

    // Gérer les exceptions potentielles lors de l'exécution
    // @OnTaskError
    // public void onTaskError(TaskExecutionException ex) {
    //     System.err.println("Erreur lors de l'exécution de la tâche : " + ex.getMessage());
    // }
}

Configuration Avancée des Tâches

Vous pouvez spécifier des noms de tâches personnalisés et passer des paramètres d'entrée.


@Component
public class AdvancedBatchTask {

    @TaskExecutor(taskName = "customBatchJob", inputParameters = {"--processDate=2023-10-27"})
    public void executeCustomJob(String processDate) {
        // Logique d'exécution personnalisée avec paramètres
        System.out.println("Exécution de la tâche personnalisée : " + taskName + " avec date : " + processDate);
    }
}

Intégration avec Spring Batch

Pour des traitements par lots plus complexes, Spring Cloud Task s'intègre nativement avec Spring Batch.


<!-- pom.xml -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-batch</artifactId>
</dependency>


import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableBatchProcessing
public class SpringBatchConfig {
    // Configuration spécifique à Spring Batch
}

Intégration avec des Plateformes de Tâches

Spring Cloud Task peut être déployé et géré sur des plateformes comme Cloud Foundry ou Kubernetes, offrant ainsi des capacités avancées de déploiement et d'orchestration pour vos tâches batch.

En résumé, Spring Cloud Task offre une solution robuste pour la gestion des tâches batch au sein des applications Spring Boot. En définissant clairement les tâches, en configurant leurs propriétés, en utilisant des lanceurs, des écouteurs, et en l'intégrent potentiellement avec Spring Batch ou des plateformes externes, les développeurs peuvent gérer efficacement leurs traitements par lots.

Étiquettes: Spring Boot spring cloud task batch processing Microservices Java

Publié le 6 octobre à 08h58