Más contenido relacionado
La actualidad más candente (20)
Similar a Breizhjug spring batch 2011 (20)
Breizhjug spring batch 2011
- 2. 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 Technology
Architecte technique
Spécialisé Java EE / Spring
Productivité et qualité des développements
Ch'ti JUG, Agile Tour Lille
Copyright © BreizhJug
- 3. De quoi va-t-on parler ce soir ?
• On va parler de batchs en Java
• … et aussi de bière
Copyright © BreizhJug
http://www.flickr.com/photos/fromeyetopixel/2559391584/
- 4. 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
Copyright © BreizhJug
- 5. 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
Copyright © BreizhJug
- 6. Batch : de quoi parle-t-on ?
Batch processing = suite de traitements sur
ensemble de données…
Copyright © BreizhJug
- 7. Batch : de quoi parle-t-on ?
… potentiellement grands volumes…
http://www.flickr.com/photos/claudiasofia99/2878579560/
Copyright © BreizhJug
- 8. Batch : de quoi parle-t-on ?
… sans intervention d’un utilisateur humain – pas
d’interface homme-machine
Copyright © BreizhJug
- 9. 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
• …
Copyright © BreizhJug
- 10. Batch : de quoi parle-t-on ?
Un batch n’est pas un scheduler
• Cron, Quartz, $U…
• Mais un scheduler peut le lancer
Copyright © BreizhJug
- 11. 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
Copyright © BreizhJug
- 17. Et quand j’écris un batch ?
Je suis… à poil ?
http://www.flickr.com/photos/crystaljingsr/3914729343/sizes/o/in/set-72157622354789320/
Copyright © BreizhJug
- 18. Et quand j’écris un batch ?
Spring Batch offre pourtant une solution pour vous guider
lors de l’écriture de vos batchs en Java
Copyright © BreizhJug
- 19. Spring Batch propose…
• Un cadre
• Un vocabulaire (domainlanguage)
• Traitement par lots (grands volumes de
données)
• Gestion des transactions
• Flow, reprise sur erreur
• Spring dans ses batchs
Parallélisme Spring Batch Admin
Partitionnement
Copyright © BreizhJug
- 21. 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
Copyright © BreizhJug
- 22. Schéma du batch
InitialStep
InitialTasklet
RecipeStep
Chunkorientedtasklet
ItemReader ItemProcessor ItemWriter
Copyright © BreizhJug
- 23. ItemReader
InitialStep
InitialTasklet
RecipeStep
Chunkorientedtasklet
ItemReader ItemProcessor ItemWriter
Copyright © BreizhJug
- 24. ItemReader
• Besoin
– Lire le XML de recettes
• ItemReader
– Fournit des items en entrée
<xml> SELECT ... FROM ...
123;AB;
456;CD;
Copyright © BreizhJug
- 26. ItemProcessor
InitialStep
InitialTasklet
RecipeStep
Chunkorientedtasklet
ItemReader ItemProcessor ItemWriter
Copyright © BreizhJug
- 27. 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 »
Copyright © BreizhJug
- 30. ItemWriter
InitialStep
InitialTasklet
RecipeStep
Chunkorientedtasklet
ItemReader ItemProcessor ItemWriter
Copyright © BreizhJug
- 31. ItemWriter
• Besoin
– Décharge les bières dans une base SQL
• ItemWriter
– Ecrit les items
<xml> INSERT... INTO ...
123;AB;
456;CD;
Copyright © BreizhJug
- 33. Chunk
InitialStep
InitialTasklet
RecipeStep
Chunkorientedtasklet
ItemReader ItemProcessor ItemWriter
Copyright © BreizhJug
- 34. 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
Copyright © BreizhJug
- 38. Listener
InitialStep
InitialTasklet
RecipeStep
Chunkorientedtasklet
ItemReader ItemProcessor ItemWriter
Copyright © BreizhJug
- 39. Listener
• Besoin
– Création d’un fichier de rejet
• Listener
– Etre à l’écoute des évènements du batch
Copyright © BreizhJug
- 43. Tasklet
InitialStep
InitialTasklet
RecipeStep
Chunkorientedtasklet
ItemReader ItemProcessor ItemWriter
Copyright © BreizhJug
- 44. 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
Copyright © BreizhJug
- 46. Step
InitialStep
InitialTasklet
RecipeStep
Chunkorientedtasklet
ItemReader ItemProcessor ItemWriter
Copyright © BreizhJug
- 47. Step
• Besoin
– Etape dans le processus du batch
– Contrôle le workflow
Copyright © BreizhJug
- 48. Job
InitialStep
InitialTasklet
RecipeStep
Chunkorientedtasklet
ItemReader ItemProcessor ItemWriter
Copyright © BreizhJug
- 49. Job
• Besoin
– Décrire les étapes du batch
– Composé d’un ou plusieurs steps
Copyright © BreizhJug
Spring Tools Suite
- 52. Lancer un job
via un scheduler
On utilise ici SpringScheduler.
Il est indépendant de Spring Batch
Copyright © BreizhJug
- 54. 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
Copyright © BreizhJug
- 57. 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 Springway, Spring Intégration
✔Productivité, à terme...
✗… après avoir payé le ticket d'entrée
Copyright © BreizhJug
- 58. 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
Copyright © BreizhJug
- 59. 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
Copyright © BreizhJug
- 60. Des questions,
avant la suite ?
Copyright © BreizhJug http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/
- 62. 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
Copyright © BreizhJug
- 63. Maître détail
R;BurtonAle;AllGrain;Brad Smith
H;Goldings, East Kent;UnitedKingdom
H;NorthernBrewer;Germany
H;Fuggles;UnitedKingdom
END
R;DryStout;AllGrain;Brad Smith
H;Fuggles;UnitedKingdom
END
Copyright © BreizhJug
- 64. Maître détail
RecipeStep
Chunkorientedtasklet
ItemReader ItemProcessor ItemWriter
Copyright © BreizhJug
- 66. Maître détail
Déclaration du reader custom
Copyright © BreizhJug
- 67. R;BurtonAle;AllGrain;Brad Smith
H;Goldings, East Kent;UnitedKingdom
H;NorthernBrewer;Germany
H;Fuggles;UnitedKingdom
END
R;DryStout;AllGrain;Brad Smith
H;Fuggles;UnitedKingdom
END
Copyright © BreizhJug
- 68. Maître détail
Déclaration du reader délégué
Copyright © BreizhJug
- 69. 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
Copyright © BreizhJug
- 70. 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
Copyright © BreizhJug
- 71. 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)
Copyright © BreizhJug
- 72. Reprise sur erreur: Skip
0001;ABC;DEF;
0002;ABC;DEF;
000zxjgxdjghjsdfkud
0004;ABC;DEF;
• Ne pas arrêter le batch si la
lecture/process/écriture échoue
• Personnaliser les cas de « skip »
• Ecouter les cas de « skip »
Copyright © BreizhJug
- 73. Reprise sur erreur: Skip
– Si FlatFileException, Spring Batch skip l’item
– Skip de 10 items max
– Au-delà la step « failed »
– Include/Exclude possible
Copyright © BreizhJug
- 74. Reprise sur erreur: Skip
• Personnaliser la gestion du « skip »
• Par défaut: LimitCheckingItemSkipPolicy
Copyright © BreizhJug
- 76. Reprise sur erreur: Skip
• Un listener permet de traiter les items
écartés
• Les annotations existent aussi
– @OnSkipInRead
– @OnSkipInWrite
– @OnSkipInProcess
Copyright © BreizhJug
- 77. Reprise sur erreur: Retry
http://www.libertaland.com/2011/04/une-femme-de-75-ans-coupe-tout-linternet-en-armenie/
Copyright © BreizhJug
- 78. Reprise sur erreur: Retry
• Permet de relancer une opération si
indispo temporaire
• Personnaliser les cas de « retry »
• Ecouter les cas de « retry »
Copyright © BreizhJug
- 79. Reprise sur erreur: Retry
– Si DLDAE, Spring Batch recommence
– Retry 3 fois max
– Au-delà la step « failed »
– Include/Exclude possible
Copyright © BreizhJug
- 80. Reprise sur erreur: Retry
• Personnaliser le « retry »: RetryPolicy
– SimpleRetryPolicy (défaut)
• Stratégie entre 2 « retry »: BackoffPolicy
– NoBackOffPolicy (défaut)
– ExponentialBackOffPolicy vraiment utile
Copyright © BreizhJug
- 82. Reprise sur erreur: Retry
• Un listener permet de traiter les « retry »
Copyright © BreizhJug
- 83. Reprise sur erreur: Retry
• Pour les tasklets
– RetryTemplate
– RetryOperationsInterceptor avec de l’AOP
Copyright © BreizhJug
- 84. Reprise sur erreur:
Restart
• Même avec skip/retry, un batch peut
planter
• Il reste encore une solution
• Nous pouvons redémarrer le batch
Copyright © BreizhJug
- 86. 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 »
Copyright © BreizhJug
- 87. 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.
Copyright © BreizhJug
- 90. Reprise sur erreur
Conclusion
• 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
Copyright © BreizhJug
- 91. Gestion du flow
Le « batch bisounours »
Step A
Step B
Copyright © BreizhJug
- 94. Gestion du flow
• Le « batch complexe»
Step
Step Step
Step Step Step
Step Step Step
Copyright © BreizhJug
- 95. Gestion du flow
• Comment…
– faire des flows non linéaires
– piloter l’enchaînement des steps
– passer des données entre steps
Copyright © BreizhJug
- 96. Gestion du flow
• Exemple plus simple ;)
StepA
FAILED
StepAlert
*
StepB
Copyright © BreizhJug
- 98. 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)
Copyright © BreizhJug
- 99. Gestion du flow
• Créer et utiliser ses propres « exit status »
– StepExecutionListener
– JobDecider
Copyright © BreizhJug
- 100. Gestion du flow
• Utiliser ses propres « exit status »
StepA
COMPLETED WITH SKIPS
StepC
*
StepB
Copyright © BreizhJug
- 101. Gestion du flow
• « exit status » + StepExecutionListener
Copyright © BreizhJug
- 103. Gestion du flow
• « exit status » + JobExecutionDecider
Copyright © BreizhJug
- 105. Gestion du flow
• Alors « StepExecutionListener » ou
« JobExecutionDecider » ?
– Le exit status du step est stocké comme meta
data
– Pas de « latebinding » avec le
JobExecutionDecider
Copyright © BreizhJug
- 106. Gestion du flow
• Encore plus de contrôle: end, fail
Copyright © BreizhJug
- 107. Gestion du flow
• Partager des informations entre les steps
– À la Spring:beanclassic
– A la Spring Batch: « Executioncontext »
• 1 pour le Job et 1 par Step
• C’est une Map sauvegardé dans les meta data
• Attention au volume
• Latebindings
– #{jobExecutionContext[‘myKey']}
Copyright © BreizhJug
- 110. Gestion du flow
Step A
• Mutualiser les flows
Step B Mon
Flow
Step C
Step D
Copyright © BreizhJug
- 113. 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
Copyright © BreizhJug
- 114. Scaling
http://www.flickr.com/photos/claudiasofia99/2878579560/
Copyright © BreizhJug
- 115. 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)
Copyright © BreizhJug
- 116. Spring Batch in Action
http://www.manning.com/templier
Copyright © BreizhJug
- 117. 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/
Copyright © BreizhJug
- 119. ROTI
http://www.flickr.com/photos/34943981@N00/202923614/
Copyright © BreizhJug