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.