Download - Paris JUG Spring Batch
![Page 1: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/1.jpg)
Spring BatchMardi 14 Mai 2013
Paris JUG
Olivier Bazoud
Julien Jakubowski
![Page 2: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/2.jpg)
Julien Jakubowski @jak78
Java depuis > 10 ans
Spécialisé Java EE / Spring
Vos réactions: #springbatch #parisjug
Intervenants
Olivier Bazoud @obazoud
Architecte technique sénior
Java EE / Spring, Spring Batch, NoSQL, Node.js
Co-auteur de « Spring Batch in Action »
![Page 3: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/3.jpg)
De quoi va-t-on parler ce soir ?
• On va parler de batchs en Java
• … et aussi de bière
http://www.flickr.com/photos/fromeyetopixel/2559391584/
![Page 4: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/4.jpg)
Nos objectifs
En sortant de la salle, vous savez:
Si Spring Batch est utile pour vous (ou pas)
Les notions principales de Spring Batch
… et quelques notions avancées
Faire un batch « Spring Batch » dès demain
https://github.com/obazoud/spring-batch-sug
![Page 5: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/5.jpg)
Batch : de quoi parle-t-on ?
Batch processing = répétition de traitements sur un ensemble de données…
![Page 6: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/6.jpg)
Batch : de quoi parle-t-on ?
… potentiellement grands volumes…
http://www.flickr.com/photos/claudiasofia99/2878579560/
![Page 7: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/7.jpg)
Batch : de quoi parle-t-on ?
… sans intervention d’un utilisateur humain – pas d’interface homme-machine
![Page 8: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/8.jpg)
Batch : de quoi parle-t-on ?
batch ≠ scheduler
![Page 9: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/9.jpg)
Problèmes récurrents• Fiabilité
![Page 10: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/10.jpg)
Problèmes récurrents• Maintenabilité
![Page 11: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/11.jpg)
Problèmes récurrents• Réinvention de la roue… carrée
![Page 12: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/12.jpg)
Spring Batch propose…
• Un cadre• Un vocabulaire (domain language)• Traitement par lots• Flow, Reprise sur erreur, …• Spring dans ses batchs• …
Parallélisme
PartitionnementSpring Batch Admin
![Page 13: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/13.jpg)
Spring Batch
Notions de base
![Page 14: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/14.jpg)
BeerBatch• Ecrire la date de début du batch• Lire le fichier XML de recettes, au format BeerXML• Ecrire en base de données
![Page 15: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/15.jpg)
![Page 16: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/16.jpg)
Schéma du batch
RecipeStep
InitialStep
Ecrit une date dans un log
Chunk oriented tasklet
ItemReader ItemWriterItemProcessor
![Page 17: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/17.jpg)
Tasklet
RecipeStep
InitialStep
Chunk oriented tasklet
ItemReader ItemProcessor ItemWriter
Ecrit une date dans un log
![Page 18: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/18.jpg)
Tasklet
• Besoin– Effectuer 1 tâche unitaire
• Exemples– Unzip d’un fichier– Ecrire une date dans un log– …
![Page 19: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/19.jpg)
ItemReader
RecipeStep
InitialStep
InitialTasklet
Chunk oriented tasklet
ItemReader ItemWriterItemProcessorItemReader
![Page 20: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/20.jpg)
ItemReader• Besoin
– Lire le XML de recettes
• ItemReader– Fournit des items en entrée
![Page 21: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/21.jpg)
Morceaux de code
![Page 22: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/22.jpg)
ItemProcessor
RecipeStep
InitialStep
InitialTasklet
Chunk oriented tasklet
ItemReader ItemWriterItemProcessor
![Page 23: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/23.jpg)
ItemProcessor• Besoin
– Transforme, valide et / ou filtre une recette
• ItemProcessor– Transforme un item en un autre– Filtrer ou rejeter un item– Emplacement pour les « règles métier »
![Page 24: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/24.jpg)
ItemWriter
RecipeStep
InitialStep
InitialTasklet
Chunk oriented tasklet
ItemReader ItemProcessor ItemWriter
![Page 25: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/25.jpg)
ItemWriter• Besoin
– Décharge les bières dans une base SQL
• ItemWriter– Ecrit les items
![Page 26: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/26.jpg)
Chunk
RecipeStep
InitialStep
InitialTasklet
Chunk oriented tasklet
ItemReader ItemProcessor ItemWriter
![Page 27: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/27.jpg)
Chunk
• Besoin– Lire, transformer et écrire
• Chunk– Lit et transforme chaque recette successivement– Ecrit les recettes, par lot
![Page 28: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/28.jpg)
Chunk
Taille du lot = commit interval = 2
![Page 29: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/29.jpg)
Step
RecipeStep
InitialStep
Chunk oriented tasklet
ItemReader ItemProcessor ItemWriter
InitialTasklet
![Page 30: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/30.jpg)
Step
• Besoin– Etape dans le processus du batch– Contrôle le workflow
![Page 31: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/31.jpg)
Job
RecipeStep
InitialStep
Chunk oriented tasklet
ItemReader ItemProcessor ItemWriter
InitialTasklet
![Page 32: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/32.jpg)
Job
• Besoin– Décrire les étapes du batch– Composé d’un ou plusieurs steps
Spring Tools Suite
![Page 33: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/33.jpg)
Tests automatisés
• Coder un batch en TDD
• Tests d'intégration facilités
https://github.com/obazoud/spring-batch-sug
![Page 34: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/34.jpg)
Forces et faiblesses
✔ Batchs complexes mieux maintenables✔ Productivité✔ Tests
✗Ticket d'entrée✗Ne convient pas à tous les batchs
![Page 35: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/35.jpg)
Retour d’expérience Ekino
• Avec « Spring Batch »– Moins de code produit– Plus de tests unitaires & intégrations– Spring Batch s'occupe de la montée en charge– SQL/MyBatis
• Gain par rapport à un batch « legacy »– XML 100Mo + SQL; Gain : de 60 mn à 8mn– 10 fichiers 4Mo + SQL; Gain : de 10mn à 1mn30s– 20 fois rapide qu’un batch en … PHP ;)
![Page 36: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/36.jpg)
JSR-352 « javax.batch »
Ressemble beaucoup à Spring Batch
![Page 37: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/37.jpg)
Spring BatchAllons plus loin
![Page 38: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/38.jpg)
Un batch plus robuste
![Page 39: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/39.jpg)
Flow
![Page 40: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/40.jpg)
Scaling
http://www.flickr.com/photos/claudiasofia99/2878579560/
![Page 41: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/41.jpg)
Monitoring
![Page 42: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/42.jpg)
Spring Batch Admin
![Page 43: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/43.jpg)
Un batch plus robuste reprise sur erreurs
![Page 44: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/44.jpg)
Reprise sur erreur
• Spring Batch « out-of-the-box » propose:– Sauter les erreurs non bloquantes (skip)
• survivre à quelques données invalides
– Recommencer un traitement (retry)• survivre à une indisponibilité temporaire
– Redémarrer un batch (restart)• on est en mesure de le relancer
![Page 45: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/45.jpg)
Reprise sur erreur: Skip
• Par défaut, au-delà du « skip-limit », failed
0001;ABC;DEF;0002;ABC;DEF;000zxjgxdjghjsdfkud0004;ABC;DEF;
![Page 46: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/46.jpg)
Reprise sur erreur: Retry
![Page 47: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/47.jpg)
Reprise sur erreur: Retry
• Relancer une opération si indisponibilité
• Par défaut, au-delà du « retry-limit », failed• Personnaliser le « retry »
– RetryPolicy– Stratégie entre 2 « retry »: BackoffPolicy
• RetryListener pour écouter
![Page 48: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/48.jpg)
Reprise sur erreur: Restart
![Page 49: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/49.jpg)
Reprise sur erreur: Restart
• Spring batch stocke des méta data
![Page 50: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/50.jpg)
Reprise sur erreur: Restart
• Indique si le job est « restartable »
• Indique le nombre max de « restart »
• Reader/Writer doivent être « restartable »
![Page 51: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/51.jpg)
Reprise sur erreurConclusion
• Ecarter des items défectueux (skip)
• Recommencer une step s’il y a une erreur temporaire (retry)
• Redémarrer un job (restart)
![Page 52: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/52.jpg)
Flow
![Page 53: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/53.jpg)
Gestion du flow
• Exemple plus simple ;)
StepA
StepB
StepAlertFAILED
*
![Page 54: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/54.jpg)
Gestion du flow
![Page 55: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/55.jpg)
Gestion du flow
• Status– Etat du job/step en cours/après d’exécution
• Créer et utiliser ses propres « status »
• Gérer le flow– StepExecutionListener– JobDecider
![Page 56: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/56.jpg)
Scaling
http://www.flickr.com/photos/claudiasofia99/2878579560/
![Page 57: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/57.jpg)
Scaling
![Page 58: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/58.jpg)
Horizontal Scaling
• RabbitMQ: Message-Oriented Middleware– Découpler le producteur des consommateurs
• Batch Orienté Tâche ou Worker
![Page 59: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/59.jpg)
Horizontal Scaling
WorkerBatch
WorkerBatch
Spring Batch
WorkerBatch
AMQPSpring Integration
Exchange
QueueBatch
Spring Batch Spring Batch
AMQPSpring Integration
![Page 60: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/60.jpg)
Scaling
• Si un ItemProcessor est « lent »
• ItemProcessor en asynchrone• ItemWriter attend la fin des processors
• AsyncItemProcessor / AsyncItemWriter
![Page 61: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/61.jpg)
Scaling
• Multi-threaded Step (Local)– Une Step est multithreaded
• Parallel Steps (Local)– Les Steps sont exécutées en parallèle
![Page 62: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/62.jpg)
Scaling
• Remote Chunking of Step (Remote)– Distribution des chunks (Horizontal Scaling)– Reader sur les master– Processor/Writer sur les slaves
• Partitioning a Step (Local + Remote)– Découpe les données suivant une clé de
partition
![Page 63: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/63.jpg)
Monitoring
• Graphite http://graphite.wikidot.com
![Page 64: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/64.jpg)
Monitoring
• Collectd – http://collectd.org
– démon qui recueille périodiquement des statistiques de performance du système
• JMXTrans – https://github.com/jmxtrans/jmxtrans
– Interroge les données JMX de la JVM et les envoyer dans Graphite
![Page 65: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/65.jpg)
Monitoring
• Metrics – http://metrics.codahale.com/
– Connaitre l’intérieur de votre application– Gauges, Counters, Meters, Histogram, Timers
• Extension pour Spring Batch– https://github.com/obazoud/metrics-spring-batch– Bientôt sur Maven Central
![Page 66: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/66.jpg)
Monitoring
Mode push au lieu de pull
![Page 67: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/67.jpg)
Monitoring
![Page 68: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/68.jpg)
Spring Batch Admin
![Page 69: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/69.jpg)
Spring Batch Admin
• Console Web pour Spring Batch– « Standalone » ou « Embedded »– API Rest– Uploader une configuration, un fichier à traiter– « Customisable »– Informations sur les jobs, steps, …
![Page 70: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/70.jpg)
« Spring Batch in Action »
http://bit.ly/springbatchinaction
http://www.ekino.com
Un petit Tweet à @3k1n0 ;)
![Page 71: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/71.jpg)
ROTI
http://www.flickr.com/photos/34943981@N00/202923614/
![Page 72: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/72.jpg)
Liens• Le code de la présentation
– https://github.com/obazoud/spring-batch-sug
• Spring Batch 2.1.x– http://static.springsource.org/spring-batch
• Spring Batch 2.2 coming soon
• Articles sur le web– http://www.theserverside.com/news/1363855/Spring-Batch-Overview– http://www.infoq.com/presentations/syer-introducing-spring-batch– http://blog.zenika.com/index.php?post/2010/03/05/To-batch-or-not-to-
batch– http://blog.octo.com/spring-batch-par-quel-bout-le-prendre/
![Page 73: Paris JUG Spring Batch](https://reader033.vdocuments.us/reader033/viewer/2022042503/558e696c1a28abf4658b45cf/html5/thumbnails/73.jpg)
Questions ?
http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/