Pourquoi Spring Batch ?
Certains traitements ne peuvent pas s'exécuter en temps réel : migration de données, génération de rapports fiscaux, calculs de paie, imports massifs de fichiers CSV/XML. Ces traitements batch partagent des besoins communs :
- Traiter des volumes importants de données sans saturer la mémoire
- Reprendre un traitement interrompu là où il s'est arrêté (restart)
- Gérer les erreurs sans tout annuler (skip / retry)
- Tracer l'exécution pour l'audit et le monitoring
Spring Batch répond à tous ces besoins avec un modèle déclaratif et éprouvé.
Architecture – Job, Step, Chunk
Unité de traitement complète
Étapes séquentielles ou parallèles
Lecture chunk
Transformation
Écriture chunk
Job
Un Job est la représentation d'un traitement batch complet. Il est composé d'une ou plusieurs Steps et possède un JobInstance (exécution unique identifiée par ses paramètres) et un JobExecution (tentative d'exécution).
Step
Une Step est une phase du Job. Elle peut être de deux types :
- Chunk-oriented : lecture → traitement → écriture par paquets (le plus courant)
- Tasklet : tâche simple et atomique (purge de table, envoi d'email, etc.)
Le modèle Chunk
Le traitement par chunks est le cœur de Spring Batch. Les données sont lues par paquets (chunks) de taille configurable. Pour chaque chunk :
// Taille de chunk : 100 enregistrements à la fois @Bean public Step stepTraitementDeclarations(JobRepository jobRepository, PlatformTransactionManager txManager) { return new StepBuilder("stepTraitement", jobRepository) .<DeclarationInput, DeclarationOutput>chunk(100, txManager) .reader(declarationReader()) // lit 100 lignes .processor(declarationProcessor()) // transforme chaque ligne .writer(declarationWriter()) // écrit les 100 lignes en BDD .faultTolerant() .skip(ParseException.class).skipLimit(10) // ignore jusqu'à 10 erreurs .retry(DeadlockLoserDataAccessException.class).retryLimit(3) .build(); }
Les composants clés
Lit les données source une par une. Implémentations natives : FlatFileItemReader (CSV), JpaPagingItemReader (BDD), StaxEventItemReader (XML), JdbcCursorItemReader.
Transforme chaque élément lu. Optionnel. Peut filtrer (retourner null exclut l'élément du chunk). Composable avec CompositeItemProcessor.
Écrit le chunk traité en sortie. Implémentations natives : JpaItemWriter, JdbcBatchItemWriter, FlatFileItemWriter, CompositeItemWriter.
Persistence des métadonnées d'exécution (JobInstance, JobExecution, StepExecution). Permet le restart et l'audit. Utilise une base de données dédiée.
Gestion des erreurs
- Skip : ignorer les enregistrements en erreur et continuer (avec limite configurable)
- Retry : relancer le traitement d'un chunk en cas d'erreur transitoire (ex: deadlock BDD)
- Restart : reprendre un Job interrompu depuis le dernier checkpoint validé
- Listeners : hooks sur le cycle de vie (avant/après Job, Step, Chunk, Item)
Outils complémentaires
Spring Boot Spring Batch Integration Quartz Scheduler Micrometer (monitoring) Testcontainers (tests)