Spring Batch 17-05-2011

2 138 vues

Publié le

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.

Publié dans : Technologie
  • Soyez le premier à commenter

Spring Batch 17-05-2011

  1. 1. Spring Batch ou le Batch avec la classe ! Jean-Philippe Briend jean-philippe.briend@infin-it.fr twitter.com/jpbriend
  2. 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. 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. 4. Les batchs en Java : Demain• Organiser !• Unifier !• Simplifier !• Se concentrer sur le métier ! On aime ça !
  5. 5. Spring, pourquoi c’est sympa ?• La tuyauterie par configuration XML• On commence à être à l’aise dessus (sinon changez d’employeur !)
  6. 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 ...
  7. 7. Here comes the Sun ... Spring Batch
  8. 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. 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. 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. 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. 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. 13. 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>
  14. 14. Step : Chunk<job id="sampleJob" job-repository="jobRepository"> <step id="step1"> <tasklet transaction-manager="transactionManager"> <chunk reader="itemReader" writer="itemWriter" commit-interval="10"/> <tasklet> </step></job>
  15. 15. Flow Split
  16. 16. RésuméJob : ensemble cohérent de traitements de données Un Job est composé de StepsStep : traitement unitaire de données Une Step est composée de : un Reader un ou plusieurs Processors un Writer
  17. 17. 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; }
  18. 18. 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; }
  19. 19. 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; }
  20. 20. MultiThreading• Multi-threaded Step• Parallel Steps• Remote Chunking• Partitioning Step
  21. 21. Multi-threaded Step• Utilisation des TaskExecutors de Spring <step id="loading"> <tasklet task-executor="taskExecutor">...</tasklet> </step>
  22. 22. Parallel Steps• Utilisation des TaskExecutors de Spring• Utilisation du flow Split <job id="job1"> <split id="split1" task-executor="taskExecutor" next="step4"> <flow> <step id="step1" next="step2" /> <step id="step2" /> </flow> <flow> <step id="step3" /> </flow> </split> <step id="step4" /> </job> <beans:bean id="taskExecutor" class="org.spr...SimpleAsyncTaskExecutor"/>
  23. 23. Remote Chunking
  24. 24. Partitioning Step
  25. 25. Demo

×