
Introduction
Spring Batch permet le traitement d’un entrepot de donnée depuis plusieurs sources et les transformer à une autre forme
Définitions
Disclaimer: cet article n’est pas un tutorial. Il est seulement un résumé que j’ai fait pour un devoir surveillé.
Job
Un job correspond à un traitement qui est effectué lors de l’exécution d’un batch
- Dans Spring Batch, un job est représenté par un Bean implémentant l’interface Job
- Un job est composé d’un ensemble d’étapes (step).
- Les étapes d’un job sont séquentielles, c’est-à-dire qu’elles doivent être exécutées les unes à la suite des autres.
JobInstance
JobInstance fait référence à l’exécution d’un batch. On parlerait de l’instance de job du 30 décembre 2014, de celle du 31 décembre, et ainsi de suite
Une instance de job implique donc la définition de l’identité d’un job, qui passe dans Spring Batch par la classe JobParameters.
JobExecution
JobExecution
est un objet qui contient ce qui s’est réellement passé pendant une exécution.
JobParameters
Ce sont normalement des meta-data qu’on ajoute à un job pour les récuperer plus tard. Par exemple, on veut savoir la date d’exécution de chaque Job. Dans ce cas, on ajoute un parameter date, qui va être générer à chaque exécution du Job.
JobParameters jobPara=new JobParametersBuilder().addLong("currentTime", new Long(System.currentTimeMillis())).toJobParameters();
Il est difficile, en outre, d’expliquer ces concepts sans les voir mettre en oeuvre. Voilà une image qui résume tout.
Step
Tasklet
Ce qui est fait dans un Step
est representé par un Tasklet
, càd, une tâche. Généralement, on utilise Spring Batch pour le Chunk oriented processing: lire d’une source, traiter les données et les persister à une autre source (csv, bd, …), mais on peut définir nos propres tâches.
Chunk
Définit et configure les interface suivants: ItemReade
,ItemProcessor
et le ItemWriter
.
- ItemReader: chargé de récupérer des données depuis une source
- ItemProcessor: chargé de transformer les données lues.
- ItemWriter: chargé d’exporter les données vers un support de stockage
ItemReader
Généralement parlé, cet interface possède des dizaines d’implémentations, a titre d’exemple, FlatFileItemReader
en cas d’un fichier texte. Tout dépend de nos besoins. Vous devez reférer toujours à la documentation pour savoir quelles sont les méthodes prises en charge.
Pour un FlatFileItemReader
, savoir ces différentes properties et beans est nécessaire.
- Resource: permet de spécifier le fichier source à lire.
DefaultLineMapper
: bean responsable à transformer (tokenizer) un ligne à un ensemble des tokens (fieldset).DelimitedLineTokenizer
: En effet, c’est ce bean qui est responsable de la transformation. on définit ici, le delimiter virgule par exemple et les field names.
fieldSetMapper
: définit le TargetType: l’objet à mapper. fieldset -> targetType
JobRepository
JobRepository
comme son nom l’indique est un interface qui offre un mechanisme de persistence (écrire dans un BD) pour toutes les meta-data nécessaires à l’exécution d’un job.
SimpleJobRepository
est la seule implementation pour cet interface.
<bean id="jobRepository"
class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
<property name="transactionManager" ref="transactionManager"/>
<property name="table-prefix" value="BATCH_T"/>
</bean>
On peut utiliser un DataSource
au lieu d’un TransactionManager
, cela revient au même chose.
MapJobRepositoryFactoryBean
est utilisé lorsque on veut tester seulement le Batch processing sans persistance au BD.
JobLauncher
JobLauncher
est l’interface qui permet l’exécution d’un Job. Son seule implémentation estSimpleJobLauncher
.
Exécuter un batch automatiquement
<task:scheduled-tasks>
<task:scheduled ref="jobLauncher" method="run" cron=" 0 0-59/1 * * * * " />
</task:scheduled-tasks>