Retour au portfolio Culture technique
Framework Java · Spring

Spring Batch

Framework de traitement de données par lots (batch processing) : lire des millions d'enregistrements, les transformer et les écrire de manière robuste, relançable et tracée.

JavaSpringETLBatch processingDéclaratif

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 :

Spring Batch répond à tous ces besoins avec un modèle déclaratif et éprouvé.

Architecture – Job, Step, Chunk

Modèle d'exécution Spring Batch
🗂 Job
Unité de traitement complète
Step 1 · Step 2 · Step N
Étapes séquentielles ou parallèles
📥 ItemReader
Lecture chunk
⚙️ ItemProcessor
Transformation
📤 ItemWriter
É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 :

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

ItemReader

Lit les données source une par une. Implémentations natives : FlatFileItemReader (CSV), JpaPagingItemReader (BDD), StaxEventItemReader (XML), JdbcCursorItemReader.

ItemProcessor

Transforme chaque élément lu. Optionnel. Peut filtrer (retourner null exclut l'élément du chunk). Composable avec CompositeItemProcessor.

ItemWriter

Écrit le chunk traité en sortie. Implémentations natives : JpaItemWriter, JdbcBatchItemWriter, FlatFileItemWriter, CompositeItemWriter.

JobRepository

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

Cas d'usage typiques : déclarations fiscales (PASRAU, 1042-S), imports de fichiers métier, migrations de données, génération de rapports périodiques, synchronisation entre systèmes.

Outils complémentaires

Spring Boot Spring Batch Integration Quartz Scheduler Micrometer (monitoring) Testcontainers (tests)