Spring batch :
Spring batch est un framework pour traiter automatiaquement les donnes de
grandes quenites de donnnes de manière e icace et fiable .
Exemple de cas d’utilisation :
Lire des donnes depuis un source comme fichiers plats , base de donnes .
Valider ou transformer ces donnes .
Ecrire les donnes sous une autre forme.
Problème récurrents dans le traitement des batches :
1. Gestion des transactions :
Une transaction est une unité de travail qui doivent être traites de
manière complète ou non traite de tout .
Toujours s’assurer que les transactions sont coherentes et bien geres :
Les defis dans ce contexte :
Atomicité :
une transaction doit etre valide cad committed ou bien completement
annulee (RollBack) .
Concurrence :
pls processus de traitements par lots accedent aux memes donnes en meme
temps donc on aura des conflit . soit donc le verrouillages de ressources .
Durabilité :
Une fois la transaction est validee , les e ets doivent etre permanents ,
L’echec ne doit pas compromet la transaction.
2. Reprise sur Erreur :
Il faut detecter lendroit ou on une erreur, afin de pouvoir de corriger l’anomalie
sans redemarer touts le processus.
Cad reprendre a partir du dernier point validée . comme checkpoints.
L’erreur ne doit pas a ecter tout le processus . le reste doit continue dans
interruption.
3. Maintenabilite :
Les batches sont deficile a maintenir en fonction de leur evolution.
La solution c’est de faire une code simple , Modularite …
4. Optimisation des performances pour eviter de reinventer la roue :
Eviter la redondance.
Parallelisme .
Optimisation des acces aux bases de donnes.
Fonctionnalites cles de spring Batchs :
Conteneur leger :
S’appuie sur le conteneur de spring : Spring IoC container.
Gestion de la persistance et des transactions :
Persistance :
Fournit des outils pour suivre l’etat d’execution des jobs et les steps, en e et
utilisation des bases de donnes pour stocker des informations telles que les
metadones de job (execution reussi ou echoue , parametres …. )
Transaction :
S’assuer que chaque etape est atomique et que les erreures peurvent etre
correctement traites sans compromettre l’integrite des donnes .
Inversion de contrôle (IoC) :
Alors spring batch permet de configurer les composants : les lecteurs , les
processeurs , les ecrivains … d’où un code modulaire et facile a tester.
Support pour les sources de donnes courantes :
Fichiers plats comme CSV , XML , etc …
Lecteur de fichier plats CSV : FlatFileItemReader. ET StaxEventItemReader
pour Fichier XML.
Ecrivain de fichier plats : FlatFileItemWriter.
Base de donnes SQL : JdbcCursorItemReader ou JPAPagingItemReader
JdbcBatchItemWriter ou JpaItemWriter
ItemReder : permet de lire les donnes depuis une source . via ItemReader.
ItemProcesor : permet de transformer des donnes lues. Via ItemProcessor.
itemWriter : permet d’ecrire les donnes dans une source. ItemWriter
JOB et Step :
Unite principale de traitement dans spring batch.
Constitue de plusieurs Steps
Chaque step represent une etape disticnte du traitement par lots.
Comme la lecture, l’ecriture , traitement .
Gestion des erreurs et reprise .
Parallelisme et partitionnement des donnes .
Scheduliing :
on peut intergrer Spring Scheduler ou Quartz pour planifier l’execution
des jobs a des moments specifiques.
Architecture d’un batch spring :
Deux couches :
Couche Batch core :
API de lancer , monitorer et de gerer un batch contient les interfaces et les
classes :
JOB, JOBLANCHER, STEP
Couche batch infrastructure :
Contiet API fournissant : ItemReader, ItemProcessor, ItemWriter.
Job : ensemble de traitement a executer .
Job Instance : chaque execution d’un job est un JobInstance.
Execution d’un job : Un job peut etre execute plusieurs fois et chque
execution est une instance distincte mais partage le meme modele de job.
Steps : Unite de travail au sein d’un job . job decompose d’un plusieurs steps.
Soit sous forme de chunk based processing ou tasklet based processing.
Types de steps :
Chunk-based processing :
Traitement par morcaux , donnes lues en morceaux cad chunks , transformes
puis ecrites en un seul lot.
Tasklet-based processing :
Pour les etapes simples comme appel de service , nettoyage de donnes , ou
une seule taches a executer
CONFIGURATION DES JOBS :
Utilsation des classes java ou des fichiers XML pour definir les
etapes et les composants.
@Bean
Public Step step1() {
Return new StepBuilder(‘’import transaction’’, jobRepository)
.<TransationDto, Transaction>Chunk(10, transactionManager)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
EXECUTION D’UN JOB DANS SPRING BATCH:
jobLauncher.run(job, new JobParametersBuilder()
.addDate(‘’date’’, new Date())
.toJobParameters());
)
AUTOMATISATION DE L’EXECUTION D’UN BATCH:
<task:scheduled-tasks>
<task:scheduled ref="batchLauncher" method="run" cron="0 0 * * *
*" />
</task:scheduled-tasks>
Comment gerer les erreurs dans spring batch ? :
Configuration des ecouteurs JobExecutionListenr ou
SkipExecutionListner
Utilisation la repriser d’erreir avec un retryTemplate
Persister l’etat du job pour une reprise manuelle ou atomique .
LA TAILLE D’UN CHUNK ? :
Chunk ? :
Groupe de donnes traite comme unite , exemple lire 5 lignes , les transformer
et les ecrire avant de valider la transaction.
En general une taille moderee (10-100) o re un bon equilibre entre
performance et mémoire.
Spring Batch exemple :
Spring Batch XML => CSV :
Serialisation / deserialization d’objet :