Vous ne vous y retrouver pas dans la nébuleuse Spring ?
Vous avez entendu parler de Spring Batch (ou pas d’ailleurs), vous aimeriez que l’on vous explique comment on s’en sert ?
Vous voulez en savoir plus sur ce framework ?
Alors venez au prochain NormandyJUG !
Jean-Philippe Briend est Architecte chez Infin-IT, société de service de petite taille spécialisée en Nouvelles Technologies et Finance / Assurance.
Il est intervenu chez de grands comptes (grande distribution, finance, assurance, éditeurs, etc…) sur des projets Java / J2ee stratégiques.
En 2010, il est intervenu comme Architecte pour la refonte de batchs orientée Performance chez un grand éditeur français.
Il nous présentera Spring Batch et son retour d’expérience de ce projet.
1. Spring Batch
ou le Batch avec la classe !
Jean-Philippe Briend
jean-philippe.briend@infin-it.fr
twitter.com/jpbriend
2. Papa, c’est quoi un Batch ?
Wikipedia : http://en.wikipedia.org/wiki/Batch_processing
• Batch jobs are set up so they can be run to completion without manual intervention, so
all input data is preselected through scripts or command-line parameters. This is in
contrast to "online" or interactive programs which prompt the user for such input. A
program takes a set of data files as input, processes the data, and
produces a set of output data files. This operating environment is termed as
"batch processing" because the input data are collected into batches of files and are
processed in batches by the program.
3. Les batchs en Java : Aujourd’hui
• C’est vieux !
• C’est moche !
• C’est multi-techno !
• C’est mal écrit !
On aime pas ça !
4. Les batchs en Java : Demain
• Organiser !
• Unifier !
• Simplifier !
• Se concentrer sur le métier !
On aime ça !
5. Spring, pourquoi c’est sympa ?
• La tuyauterie par configuration XML
• On commence à être à l’aise dessus (sinon
changez d’employeur !)
6. I had a dream ...
• Imaginez qu’un Batch soit des petites cases bien
agencées ...
• Imaginez qu’on puisse agencer ces cases par de
la configuration XML ...
• Imaginez qu’on puisse facilement configurer son
Batch ...
8. Spring Batch n’est pas ...
• un ordonnanceur : non non non non, Spring
Batch ne planifie pas de batchs !
• une nouvelle techno : on ne remplace pas du PL/
SQL s’il ne le faut pas. On reste pragmatique !
• un truc brainless !
9. Spring Batch ...
• va vous obliger à vous décrasser les neurones
• va vous faire passer pour un mec carré qui fait des
choses performantes (selon la capacité intellectuelle de
chacun, hein !)
• va vous faire réutiliser (on n’y croyait plus)
• va vous faire aller voir les MOAs (oui oui oui)
• va vous faire dessiner (et ouais !)
10. Compose ton framework ...
Composons notre framework à la carte :
• petites boites pour représenter des traitements métiers
différents
• agencer ces traitements via un diagramme d’activité
• Springifier le tout
11. Step
• Définition : “A Step is a domain object that encapsulates
an independent, sequential phase of a batch job”
• Se compose de :
ItemReader
Step ItemProcessor
ItemWriter
12. Job
• Définition : “A Job is an entity that encapsulates an entire
batch process.”
• Se compose d’un ensemble de Steps agencées en un
diagramme d’activité
13.
14. Step : Tasklet
• Step la plus simple : Interface avec une seule méthode
execute
• Appelée de façon répétitive jusqu’à ce qu’elle renvoit
RepeatStatus.FINISHED ou une Exception
• Transaction unique
<step id="step1">
<tasklet ref="myTasklet"/>
</step>
17. Résumé
Job : ensemble cohérent de traitements de données
Un Job est composé de Steps
Step : traitement unitaire de données
Une Step est composée de :
un Reader
un ou plusieurs Processors
un Writer
18. ItemReader
• Rôle : lire des données quelquepart
• Fichier
• XML
• Base de Données
• Retourne un Item ou null s’il n’y en a plus
• Plein de Readers existant
public interface ItemReader<T> {
T read() throws Exception, UnexpectedInputException, ParseException;
}
19. ItemWriter
• Identique à l’ItemReader mais avec l’opération inverse
• Fichier
• XML
• Base de Données
• Plein de Writers existant
public interface ItemWriter<T> {
void write(List<? extends T> items) throws Exception;
}
20. ItemProcessor
• Très simple : prends un objet en entrée et en retourne
un autre en sortie
• Sert à implémenter la logique métier
• Chainable
public interface ItemProcessor<I, O> {
O process(I item) throws Exception;
}