paris jug spring batch
DESCRIPTION
http://www.parisjug.org/xwiki/bin/view/Meeting/20130514 Quand j'écris une application Web, il y a pléthore de frameworks Web. Quand j'accède à une base de données, il y a des solutions de persistance (Hibernate, etc.). Quand je fais du batch, je suis... à poil ! Les batchs seraient-ils les parents pauvres de Java ? Spring Batch offre pourtant une solution pour vous guider lors de l'écriture de vos batchs en Java en toute décontraction. Le 14 Mai, Olivier et Julien vous présenteront Spring Batch et vous donneront une autre vision des batchs en Java. Intervenants : Julien Jakubowski et Olivier BazoudTRANSCRIPT
![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/