Breizhjug spring batch 2011
-
Upload
olivier-bazoud -
Category
Technology
-
view
922 -
download
2
description
Transcript of Breizhjug spring batch 2011
![Page 1: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/1.jpg)
Copyright © BreizhJug
Spring BatchLundi 6 Juin 2011
![Page 2: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/2.jpg)
Copyright © BreizhJug
Intervenants
Olivier Bazoud, @obazoud, Ekino (FullSIX Group)Architecte technique de sites web à fort traffic
Java EE / Spring, Spring Batch, Groovy, Grails
Co-auteur de « Spring Batch in Action »
Spring User Group France
Julien Jakubowski, @jak78, OCTO TechnologyArchitecte technique
Spécialisé Java EE / Spring
Productivité et qualité des développements
Ch'ti JUG, Agile Tour Lille
![Page 3: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/3.jpg)
Copyright © BreizhJug
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: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/4.jpg)
Copyright © BreizhJug
Nos objectifs
En sortant de la salle, vous :
Savez identifier certains problèmes récurrents avec les batchs écrits en Java
Savez si Spring Batch est utile pour vous (ou pas)
Avez intégré les notions principales
… et quelques notions avancées
Pouvez faire un batch « Spring Batch » demain
![Page 5: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/5.jpg)
Copyright © BreizhJug
Ce qui vous attend
• Batch : de quoi parle-t-on ?• Pourquoi Spring Batch ?• Faisons ensemble un batch...
– Introduction progressive des notions de Spring Batch
• Retours d'expérience• Forces et faiblesses• Notions avancées• Questions / réponses
![Page 6: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/6.jpg)
Copyright © BreizhJug
Batch : de quoi parle-t-on ?
Batch processing = suite de traitements sur ensemble de données…
![Page 7: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/7.jpg)
Copyright © BreizhJug
Batch : de quoi parle-t-on ?
… potentiellement grands volumes…
http://www.flickr.com/photos/claudiasofia99/2878579560/
![Page 8: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/8.jpg)
Copyright © BreizhJug
Batch : de quoi parle-t-on ?
… sans intervention d’un utilisateur humain – pas d’interface homme-machine
![Page 9: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/9.jpg)
Copyright © BreizhJug
Batch : de quoi parle-t-on ?
Exemples:• Import flat / XML dans une base de données• Mise à jour de données de référentiel• Intégration de flux financiers dans un SI• …
![Page 10: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/10.jpg)
Copyright © BreizhJug
Batch : de quoi parle-t-on ?
Un batch n’est pas un scheduler• Cron, Quartz, $U…• Mais un scheduler peut le lancer
![Page 11: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/11.jpg)
Copyright © BreizhJug
Beer Batch
• Caractéristiques :– Lire le fichier XML de recettes, au format BeerXML– Ecrire les recettes en base de données– Filtrer certaines recettes et créer un fichier de rejets
![Page 12: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/12.jpg)
Copyright © BreizhJug
Problèmes récurrents• Fiabilité
![Page 13: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/13.jpg)
Copyright © BreizhJug
Problèmes récurrents• Maintenabilité
![Page 14: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/14.jpg)
Copyright © BreizhJug
Problèmes récurrents• Réinvention de la roue… carrée
![Page 15: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/15.jpg)
Copyright © BreizhJug
Quand j’écris une application web…
![Page 16: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/16.jpg)
Copyright © BreizhJug
Quand j’accède à une base de données…
![Page 17: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/17.jpg)
Copyright © BreizhJug
Et quand j’écris un batch ?
http://www.flickr.com/photos/crystaljingsr/3914729343/sizes/o/in/set-72157622354789320/
Je suis… à poil ?
![Page 18: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/18.jpg)
Copyright © BreizhJug
Et quand j’écris un batch ?
Spring Batch offre pourtant une solution pour vous guider lors de l’écriture de vos batchs en Java
![Page 19: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/19.jpg)
Copyright © BreizhJug
Spring Batch propose…
• Un cadre• Un vocabulaire (domain language)• Traitement par lots (grands volumes de
données)• Gestion des transactions• Flow, reprise sur erreur• Spring dans ses batchs
Parallélisme
PartitionnementSpring Batch Admin
![Page 20: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/20.jpg)
Copyright © BreizhJug
Spring BatchNotions de base
![Page 21: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/21.jpg)
Copyright © BreizhJug
BeerBatch V2• Ecrire la date de début du batch• Lire le fichier XML de recettes, au format BeerXML• Filtrer certaines recettes et créer un fichier de rejets• Ecrire en base de données
![Page 22: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/22.jpg)
Copyright © BreizhJug
Schéma du batch
RecipeStep
InitialStep
InitialTasklet
Chunk oriented tasklet
ItemReader ItemWriterItemProcessor
![Page 23: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/23.jpg)
Copyright © BreizhJug
ItemReader
RecipeStep
InitialStep
InitialTasklet
Chunk oriented tasklet
ItemReader ItemWriterItemProcessorItemReader
![Page 24: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/24.jpg)
Copyright © BreizhJug
ItemReader• Besoin
– Lire le XML de recettes
• ItemReader– Fournit des items en entrée
<xml>
123;AB;456;CD;
SELECT ... FROM ...
![Page 25: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/25.jpg)
Copyright © BreizhJug
Morceaux de code
![Page 26: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/26.jpg)
Copyright © BreizhJug
ItemProcessor
RecipeStep
InitialStep
InitialTasklet
Chunk oriented tasklet
ItemReader ItemWriterItemProcessor
![Page 27: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/27.jpg)
Copyright © BreizhJug
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 28: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/28.jpg)
Copyright © BreizhJug
Morceaux de code
![Page 29: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/29.jpg)
Copyright © BreizhJug
Morceaux de code
![Page 30: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/30.jpg)
Copyright © BreizhJug
ItemWriter
RecipeStep
InitialStep
InitialTasklet
Chunk oriented tasklet
ItemReader ItemProcessor ItemWriter
![Page 31: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/31.jpg)
Copyright © BreizhJug
ItemWriter• Besoin
– Décharge les bières dans une base SQL
• ItemWriter– Ecrit les items
<xml>
123;AB;456;CD;
INSERT... INTO ...
![Page 32: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/32.jpg)
Copyright © BreizhJug
Morceaux de code
![Page 33: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/33.jpg)
Copyright © BreizhJug
Chunk
RecipeStep
InitialStep
InitialTasklet
Chunk oriented tasklet
ItemReader ItemProcessor ItemWriter
![Page 34: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/34.jpg)
Copyright © BreizhJug
Chunk
• Besoin– Lire, transformer et écrire
• Chunk– Lire et transformer les données successivement– Ecrire le lot de données– Le commit-interval définit la taille du lot (différent de la taille du
fichier)– Gestion de la transaction : Commit/Rollback
![Page 35: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/35.jpg)
Copyright © BreizhJug
Chunk
![Page 36: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/36.jpg)
Copyright © BreizhJug
Traitement par lots
![Page 37: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/37.jpg)
Copyright © BreizhJug
Morceaux de code
![Page 38: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/38.jpg)
Copyright © BreizhJug
Listener
RecipeStep
InitialStep
InitialTasklet
Chunk oriented tasklet
ItemReader ItemProcessor ItemWriter
![Page 39: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/39.jpg)
Copyright © BreizhJug
Listener
• Besoin– Création d’un fichier de rejet
• Listener– Etre à l’écoute des évènements du batch
![Page 40: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/40.jpg)
Copyright © BreizhJug
Morceaux de code
![Page 41: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/41.jpg)
Copyright © BreizhJug
Morceaux de code
![Page 42: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/42.jpg)
Copyright © BreizhJug
Morceaux de code
![Page 43: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/43.jpg)
Copyright © BreizhJug
Tasklet
RecipeStep
InitialStep
Chunk oriented tasklet
ItemReader ItemProcessor ItemWriter
InitialTasklet
![Page 44: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/44.jpg)
Copyright © BreizhJug
Tasklet
• Besoin– Effectuer une tâche unitaire
• Exemples– Supprimer un répertoire et son contenu– Unzip d’un fichier– Appel d’une procédure stockée– Appel d’un web service
![Page 45: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/45.jpg)
Copyright © BreizhJug
Morceaux de code
![Page 46: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/46.jpg)
Copyright © BreizhJug
Step
RecipeStep
InitialStep
Chunk oriented tasklet
ItemReader ItemProcessor ItemWriter
InitialTasklet
![Page 47: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/47.jpg)
Copyright © BreizhJug
Step
• Besoin– Etape dans le processus du batch– Contrôle le workflow
![Page 48: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/48.jpg)
Copyright © BreizhJug
Job
RecipeStep
InitialStep
Chunk oriented tasklet
ItemReader ItemProcessor ItemWriter
InitialTasklet
![Page 49: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/49.jpg)
Copyright © BreizhJug
Job
• Besoin– Décrire les étapes du batch– Composé d’un ou plusieurs steps
Spring Tools Suite
![Page 50: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/50.jpg)
Copyright © BreizhJug
Morceaux de code
![Page 51: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/51.jpg)
Copyright © BreizhJug
Lancer un jobdirectement
![Page 52: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/52.jpg)
Copyright © BreizhJug
Lancer un jobvia un scheduler
On utilise ici Spring Scheduler.Il est indépendant de Spring Batch
![Page 53: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/53.jpg)
Copyright © BreizhJug
Lancer un jobvia un scheduler
![Page 54: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/54.jpg)
Copyright © BreizhJug
Tests
• Tests unitaires facilités via le découpage Spring Batch– writers, processors etc...
• Tests d'intégration facilités par Spring– @RunWith– Step, Job
![Page 55: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/55.jpg)
Copyright © BreizhJug
Morceaux de code
![Page 56: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/56.jpg)
Copyright © BreizhJug
Morceaux de code
![Page 57: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/57.jpg)
Copyright © BreizhJug
Forces et faiblesses
✔Fiabilité et bons patterns✔Tests unitaires et d'intégration, TDD✔Batchs complexes mieux maintenables✔Bénéficie de fonctions avancées à moindre coût✔ ...the Spring way, Spring Intégration✔Productivité, à terme...✗… après avoir payé le ticket d'entrée
![Page 58: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/58.jpg)
Copyright © BreizhJug
Retour d’expérience Ekino
• Framework de batch– Moins de code produit, moins d'erreurs possibles– Plus de tests unitaires + intégrations
• Mise en place par l'exemple– J'ai fait le premier batch pour montrer la voie– Un même vocabulaire aide à se comprendre
• Répond à nos besoins même si les batchs sont différents au niveau métier
![Page 59: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/59.jpg)
Copyright © BreizhJug
Retour d’expérience Ekino
• Nos batchs « Spring Batch » sont en SQL plutôt qu'en Hibernate
• Spring Batch s'occupe de la gestion transactionnelle
• En moyenne – 15% - 50% de gain sur le temps de développement– 15% - 50% de gain au « runtime »
• Gains plus impressionnants sur certains cas– XML 100Mo + SQL; Gain : de 60 mn à 8mn– 10 fichiers 4Mo + SQL; Gain : de 10mn à 1mn30s
![Page 60: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/60.jpg)
Copyright © BreizhJug
Des questions,avant la suite ?
http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/
![Page 61: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/61.jpg)
Copyright © BreizhJug
Spring BatchAllons plus loin
![Page 62: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/62.jpg)
Copyright © BreizhJug
Allons plus loin…
• Un cas un peu plus complexe – maître détail
• La reprise sur erreurs• Un batch qui n’a pas un flow de
bisounours…• Aperçu du parallélisme et du
partitionnement
![Page 63: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/63.jpg)
Copyright © BreizhJug
Maître détail
R;Burton Ale;All Grain;Brad SmithH;Goldings, East Kent;United KingdomH;Northern Brewer;GermanyH;Fuggles;United KingdomENDR;Dry Stout;All Grain;Brad SmithH;Fuggles;United KingdomEND
![Page 64: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/64.jpg)
Copyright © BreizhJug
Maître détail
RecipeStep
Chunk oriented tasklet
ItemReader ItemWriterItemProcessor
![Page 65: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/65.jpg)
Copyright © BreizhJug
Maître détailDéclaration du Job
![Page 66: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/66.jpg)
Copyright © BreizhJug
Maître détailDéclaration du reader custom
![Page 67: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/67.jpg)
Copyright © BreizhJug
R;Burton Ale;All Grain;Brad SmithH;Goldings, East Kent;United KingdomH;Northern Brewer;GermanyH;Fuggles;United KingdomENDR;Dry Stout;All Grain;Brad SmithH;Fuggles;United KingdomEND
![Page 68: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/68.jpg)
Copyright © BreizhJug
Maître détailDéclaration du reader délégué
![Page 69: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/69.jpg)
Copyright © BreizhJug
A retenir
• Implémentation de notre propre reader• Ré-utilisation d’un reader déjà fourni par
Spring Batch• Ré-utilisation de ce que nous avons déjà
codé précédemment
![Page 70: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/70.jpg)
Copyright © BreizhJug
Reprise sur erreur
• Un batch plus robuste (tolérant à l’erreur) c’est un batch :– Qui survit à quelques données invalides– Qui survit à une indisponibilité– Qu’on est en mesure de relancer
![Page 71: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/71.jpg)
Copyright © BreizhJug
Reprise sur erreur
• Spring Batch out-of-the-box propose:– Sauter les erreurs non bloquantes (skip)– Recommencer un traitement (retry)– Déterminer si le batch est fini (completion)– Redémarrer un batch (restart)
![Page 72: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/72.jpg)
Copyright © BreizhJug
Reprise sur erreur: Skip
• Ne pas arrêter le batch si la lecture/process/écriture échoue
• Personnaliser les cas de « skip »• Ecouter les cas de « skip »
0001;ABC;DEF;0002;ABC;DEF;000zxjgxdjghjsdfkud0004;ABC;DEF;
![Page 73: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/73.jpg)
Copyright © BreizhJug
Reprise sur erreur: Skip
– Si FlatFileException, Spring Batch skip l’item– Skip de 10 items max– Au-delà la step « failed »– Include/Exclude possible
![Page 74: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/74.jpg)
Copyright © BreizhJug
Reprise sur erreur: Skip
• Personnaliser la gestion du « skip »• Par défaut: LimitCheckingItemSkipPolicy
![Page 75: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/75.jpg)
Copyright © BreizhJug
Reprise sur erreur: Skip
• Configuration de la gestion du « skip »
![Page 76: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/76.jpg)
Copyright © BreizhJug
Reprise sur erreur: Skip
• Un listener permet de traiter les items écartés
• Les annotations existent aussi– @OnSkipInRead– @OnSkipInWrite– @OnSkipInProcess
![Page 77: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/77.jpg)
Copyright © BreizhJug
Reprise sur erreur: Retry
http://www.libertaland.com/2011/04/une-femme-de-75-ans-coupe-tout-linternet-en-armenie/
![Page 78: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/78.jpg)
Copyright © BreizhJug
Reprise sur erreur: Retry
• Permet de relancer une opération si indispo temporaire
• Personnaliser les cas de « retry »• Ecouter les cas de « retry »
![Page 79: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/79.jpg)
Copyright © BreizhJug
Reprise sur erreur: Retry
– Si DLDAE, Spring Batch recommence– Retry 3 fois max– Au-delà la step « failed »– Include/Exclude possible
![Page 80: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/80.jpg)
Copyright © BreizhJug
Reprise sur erreur: Retry
• Personnaliser le « retry »: RetryPolicy– SimpleRetryPolicy (défaut)
• Stratégie entre 2 « retry »: BackoffPolicy– NoBackOffPolicy (défaut)– ExponentialBackOffPolicy vraiment utile
![Page 81: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/81.jpg)
Copyright © BreizhJug
Reprise sur erreur: Retry
• Configuration de la gestion du « retry »
![Page 82: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/82.jpg)
Copyright © BreizhJug
Reprise sur erreur: Retry
• Un listener permet de traiter les « retry »
![Page 83: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/83.jpg)
Copyright © BreizhJug
Reprise sur erreur: Retry
• Pour les tasklets– RetryTemplate– RetryOperationsInterceptor avec de l’AOP
![Page 84: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/84.jpg)
Copyright © BreizhJug
Reprise sur erreur: Restart
• Même avec skip/retry, un batch peut planter
• Il reste encore une solution • Nous pouvons redémarrer le batch
![Page 85: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/85.jpg)
Copyright © BreizhJug
Reprise sur erreur: Restart
• Spring batch stocke des méta data
![Page 86: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/86.jpg)
Copyright © BreizhJug
Reprise sur erreur: Restart
• Spring Batch persiste régulièrement les « ExecutionContext »
• Ceci permet à Spring Batch de savoir où reprendre
• C’est ce qui fait qu’un batch est « restartable »
![Page 87: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/87.jpg)
Copyright © BreizhJug
Reprise sur erreur: Restart
• Si vous voulez que vos Reader/Writer custom soient restartables, vous devez les concevoir restartables.
• Certains fournis par Spring Batch le sont, mais pas tous
• Ce n’est pas toujours possible – ex: Writer JMS.
![Page 88: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/88.jpg)
Copyright © BreizhJug
Reprise sur erreur: Restart
• ItemStream
![Page 89: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/89.jpg)
Copyright © BreizhJug
Reprise sur erreur: Restart
• Exemple de Reader « restartable »
![Page 90: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/90.jpg)
Copyright © BreizhJug
Reprise sur erreurConclusion
• Nous savons:– Ecarter des items défectueux (skip)– Recommencer un step s’il y a une erreur
temporaire (retry)– Implémenter notre propre stratégie de
« skip » et « retry »– Redémarrer un job avec certains steps
![Page 91: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/91.jpg)
Copyright © BreizhJug
Gestion du flow
Le « batch bisounours »
Step A
Step B
![Page 92: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/92.jpg)
Copyright © BreizhJug
Gestion du flow
Exemple
![Page 93: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/93.jpg)
Copyright © BreizhJug
Gestion du flow
Exemple
![Page 94: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/94.jpg)
Copyright © BreizhJug
Gestion du flow• Le « batch complexe»
Step
Step
Step
Step
Step
Step
Step
Step
Step
![Page 95: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/95.jpg)
Copyright © BreizhJug
Gestion du flow
• Comment…– faire des flows non linéaires– piloter l’enchaînement des steps– passer des données entre steps
![Page 96: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/96.jpg)
Copyright © BreizhJug
Gestion du flow
• Exemple plus simple ;)
StepA
StepB
StepAlertFAILED
*
![Page 97: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/97.jpg)
Copyright © BreizhJug
Gestion du flow
![Page 98: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/98.jpg)
Copyright © BreizhJug
Gestion du flow
• Batch Status– Représente le status du job ou step
• Exit Status– Représente le status du job ou step au final
• Exemple– COMPLETED, STARTING, STARTED,
STOPPING, STOPPED, FAILED,ABANDONED or UNKNOWN
– C?T (CAT mais pas COUNT), C*T (CAT et COUNT)
![Page 99: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/99.jpg)
Copyright © BreizhJug
Gestion du flow
• Créer et utiliser ses propres « exit status » – StepExecutionListener– JobDecider
![Page 100: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/100.jpg)
Copyright © BreizhJug
Gestion du flow
• Utiliser ses propres « exit status »
StepA
StepB
StepC
COMPLETED WITH SKIPS
*
![Page 101: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/101.jpg)
Copyright © BreizhJug
Gestion du flow
• « exit status » + StepExecutionListener
![Page 102: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/102.jpg)
Copyright © BreizhJug
Gestion du flow• Configuration
![Page 103: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/103.jpg)
Copyright © BreizhJug
Gestion du flow
• « exit status » + JobExecutionDecider
![Page 104: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/104.jpg)
Copyright © BreizhJug
Gestion du flow• Configuration
![Page 105: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/105.jpg)
Copyright © BreizhJug
Gestion du flow
• Alors « StepExecutionListener » ou « JobExecutionDecider » ?– Le exit status du step est stocké comme meta
data– Pas de « late binding » avec le
JobExecutionDecider
![Page 106: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/106.jpg)
Copyright © BreizhJug
Gestion du flow
• Encore plus de contrôle: end, fail
![Page 107: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/107.jpg)
Copyright © BreizhJug
Gestion du flow
• Partager des informations entre les steps– À la Spring:bean classic– A la Spring Batch: « Execution context »
• 1 pour le Job et 1 par Step• C’est une Map sauvegardé dans les meta data• Attention au volume• Late bindings
– #{jobExecutionContext[‘myKey']}
![Page 108: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/108.jpg)
Copyright © BreizhJug
Gestion du flow
• Accès à ExecutionContext
![Page 109: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/109.jpg)
Copyright © BreizhJug
Gestion du flow
• Configuration
![Page 110: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/110.jpg)
Copyright © BreizhJug
Gestion du flow
• Mutualiser les flowsStep A
Step B
Step C
Step D
MonFlow
![Page 111: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/111.jpg)
Copyright © BreizhJug
Gestion du flow• Configuration
![Page 112: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/112.jpg)
Copyright © BreizhJug
Gestion du flow• Réutiliser un Job
![Page 113: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/113.jpg)
Copyright © BreizhJug
Gestion du flow
• Conclusion, nous avons– Fait des flows non linéaires– Piloté l’enchaînement des steps– Passé des données entre steps– Mutualisé et réutilisé des jobs
![Page 114: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/114.jpg)
Copyright © BreizhJug
Scaling
http://www.flickr.com/photos/claudiasofia99/2878579560/
![Page 115: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/115.jpg)
Copyright © BreizhJug
Scaling
• Différentes stratégies possibles– Multi-threaded Step (single process)– Parallel Steps (single process)– Remote Chunking of Step (multi process)– Partitioning a Step (single or multi process)
![Page 116: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/116.jpg)
Copyright © BreizhJug
Spring Batch in Actionhttp://www.manning.com/templier
![Page 117: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/117.jpg)
Copyright © BreizhJug
Liens• Spring User Group Paris
– http://groups.google.fr/group/sugfr
• Le code de la présentation– http://code.google.com/p/fr-sug-spring-batch
• Spring Batch 2.1.x– http://static.springsource.org/spring-batch
• 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 118: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/118.jpg)
Copyright © BreizhJug
Questions ?
http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/
![Page 119: Breizhjug spring batch 2011](https://reader033.fdocuments.net/reader033/viewer/2022061209/548c764cb479599e7d8b4716/html5/thumbnails/119.jpg)
Copyright © BreizhJug
ROTI
http://www.flickr.com/photos/34943981@N00/202923614/