Spring Batch
🌟 C’est quoi Spring Batch ?
Imagine que tu dois traiter un grand fichier CSV de 1 million de lignes et insérer chaque
ligne dans une base de données.
👉 Si tu fais ça ligne par ligne, ça sera lent et risqué.
👉 Spring Batch est un framework qui t’aide à gérer ce type de traitement en batch (lot) :
Lire (Read)
Traiter (Process)
Écrire (Write)
Le tout avec gestion des erreurs, logs, reprise après échec, parallélisation, etc.
🏗️Les étapes d’un Job Spring Batch
Un Job dans Spring Batch est composé de Steps (étapes).
Chaque Step suit souvent le modèle chunk-oriented processing :
1. Job
C’est le conteneur principal qui regroupe toutes les étapes.
Exemple : "Importer des clients depuis un fichier".
2. Step
Chaque job est découpé en steps.
Exemple :
o Step 1 : Lire le fichier CSV.
o Step 2 : Valider et transformer les données.
o Step 3 : Sauvegarder dans la base.
3. Reader (Lecture)
Permet de lire la donnée depuis une source (CSV, XML, DB, API...).
Exemple : FlatFileItemReader pour lire un CSV.
4. Processor (Traitement)
Permet de transformer ou filtrer la donnée.
Exemple :
o Nettoyer un champ texte.
o Vérifier qu’un email est valide.
o Ignorer une ligne si elle est corrompue.
5. Writer (Écriture)
Permet d’écrire les données traitées dans une destination (DB, autre fichier, etc.).
Exemple : JdbcBatchItemWriter pour insérer dans une base MySQL.
6. Chunk (Lot)
Spring Batch ne traite pas ligne par ligne, mais par lots (chunks).
Exemple : chunk(100) → lit 100 lignes, les traite, puis les écrit en une seule fois
(meilleure performance).
7. JobRepository
C’est la mémoire de Spring Batch.
Il stocke l’état du job (succès, échec, où il s’est arrêté).
Grâce à ça, si ton traitement plante à la ligne 500 000, tu peux reprendre là où tu t’es
arrêté.
8. JobLauncher
C’est le déclencheur qui démarre le job.
📌 Exemple simple : Lire un CSV et insérer en DB
@Configuration
@EnableBatchProcessing
public class BatchConfig {
@Bean
public FlatFileItemReader<Client> reader() {
return new FlatFileItemReaderBuilder<Client>()
.name("clientReader")
.resource(new FileSystemResource("[Link]"))
.delimited()
.names("id", "nom", "email")
.targetType([Link])
.build();
}
@Bean
public ItemProcessor<Client, Client> processor() {
return client -> {
[Link]([Link]().toUpperCase()); // transformation
return client;
};
}
@Bean
public JdbcBatchItemWriter<Client> writer(DataSource dataSource) {
return new JdbcBatchItemWriterBuilder<Client>()
.dataSource(dataSource)
.sql("INSERT INTO client (id, nom, email) VALUES
(:id, :nom, :email)")
.beanMapped()
.build();
}
@Bean
public Step step1(StepBuilderFactory stepBuilderFactory,
ItemReader<Client> reader,
ItemProcessor<Client, Client> processor,
ItemWriter<Client> writer) {
return [Link]("step1")
.<Client, Client>chunk(100)
.reader(reader)
.processor(processor)
.writer(writer)
.build();
}
@Bean
public Job importClientJob(JobBuilderFactory jobBuilderFactory, Step
step1) {
return [Link]("importClientJob")
.start(step1)
.build();
}
}
🚀 Résumé des étapes d’un Job Spring Batch
1. Configurer le Job
2. Créer les Steps
3. Définir le Reader (lecture des données)
4. Définir le Processor (transformation/validation)
5. Définir le Writer (écriture des données)
6. Assembler le tout avec un chunk
7. Exécuter le Job avec le JobLauncher