Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Breizhjug spring batch 2011

1,480 views

Published on

Présentation de Spring Batch au Breizhjug par @obazoud et @jak78

Published in: Technology

Breizhjug spring batch 2011

  1. 1. Spring Batch Lundi 6 Juin 2011Copyright © BreizhJug
  2. 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 Chti JUG, Agile Tour LilleCopyright © BreizhJug
  3. 3. De quoi va-t-on parler ce soir ? • On va parler de batchs en Java • … et aussi de bièreCopyright © BreizhJug http://www.flickr.com/photos/fromeyetopixel/2559391584/
  4. 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 » demainCopyright © BreizhJug
  5. 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 dexpérience • Forces et faiblesses • Notions avancées • Questions / réponsesCopyright © BreizhJug
  6. 6. Batch : de quoi parle-t-on ? Batch processing = suite de traitements sur ensemble de données…Copyright © BreizhJug
  7. 7. Batch : de quoi parle-t-on ? … potentiellement grands volumes… http://www.flickr.com/photos/claudiasofia99/2878579560/Copyright © BreizhJug
  8. 8. Batch : de quoi parle-t-on ? … sans intervention d’un utilisateur humain – pas d’interface homme-machineCopyright © BreizhJug
  9. 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. 10. Batch : de quoi parle-t-on ? Un batch n’est pas un scheduler • Cron, Quartz, $U… • Mais un scheduler peut le lancerCopyright © BreizhJug
  11. 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 rejetsCopyright © BreizhJug
  12. 12. Problèmes récurrents • FiabilitéCopyright © BreizhJug
  13. 13. Problèmes récurrents • MaintenabilitéCopyright © BreizhJug
  14. 14. Problèmes récurrents • Réinvention de la roue… carréeCopyright © BreizhJug
  15. 15. Quand j’écris une application web…Copyright © BreizhJug
  16. 16. Quand j’accède à une base de données…Copyright © BreizhJug
  17. 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. 18. Et quand j’écris un batch ? Spring Batch offre pourtant une solution pour vous guider lors de l’écriture de vos batchs en JavaCopyright © BreizhJug
  19. 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 PartitionnementCopyright © BreizhJug
  20. 20. Spring Batch Notions de baseCopyright © BreizhJug
  21. 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éesCopyright © BreizhJug
  22. 22. Schéma du batch InitialStep InitialTasklet RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  23. 23. ItemReader InitialStep InitialTasklet RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  24. 24. ItemReader • Besoin – Lire le XML de recettes • ItemReader – Fournit des items en entrée <xml> SELECT ... FROM ... 123;AB; 456;CD;Copyright © BreizhJug
  25. 25. Morceaux de codeCopyright © BreizhJug
  26. 26. ItemProcessor InitialStep InitialTasklet RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  27. 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
  28. 28. Morceaux de codeCopyright © BreizhJug
  29. 29. Morceaux de codeCopyright © BreizhJug
  30. 30. ItemWriter InitialStep InitialTasklet RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  31. 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
  32. 32. Morceaux de codeCopyright © BreizhJug
  33. 33. Chunk InitialStep InitialTasklet RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  34. 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/RollbackCopyright © BreizhJug
  35. 35. ChunkCopyright © BreizhJug
  36. 36. Traitement par lotsCopyright © BreizhJug
  37. 37. Morceaux de codeCopyright © BreizhJug
  38. 38. Listener InitialStep InitialTasklet RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  39. 39. Listener • Besoin – Création d’un fichier de rejet • Listener – Etre à l’écoute des évènements du batchCopyright © BreizhJug
  40. 40. Morceaux de codeCopyright © BreizhJug
  41. 41. Morceaux de codeCopyright © BreizhJug
  42. 42. Morceaux de codeCopyright © BreizhJug
  43. 43. Tasklet InitialStep InitialTasklet RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  44. 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 serviceCopyright © BreizhJug
  45. 45. Morceaux de codeCopyright © BreizhJug
  46. 46. Step InitialStep InitialTasklet RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  47. 47. Step • Besoin – Etape dans le processus du batch – Contrôle le workflowCopyright © BreizhJug
  48. 48. Job InitialStep InitialTasklet RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  49. 49. Job • Besoin – Décrire les étapes du batch – Composé d’un ou plusieurs stepsCopyright © BreizhJug Spring Tools Suite
  50. 50. Morceaux de codeCopyright © BreizhJug
  51. 51. Lancer un job directementCopyright © BreizhJug
  52. 52. Lancer un job via un scheduler On utilise ici SpringScheduler. Il est indépendant de Spring BatchCopyright © BreizhJug
  53. 53. Lancer un job via un schedulerCopyright © BreizhJug
  54. 54. Tests • Tests unitaires facilités via le découpage Spring Batch – writers, processors etc... • Tests dintégration facilités par Spring – @RunWith – Step, JobCopyright © BreizhJug
  55. 55. Morceaux de codeCopyright © BreizhJug
  56. 56. Morceaux de codeCopyright © BreizhJug
  57. 57. Forces et faiblesses ✔Fiabilité et bons patterns ✔Tests unitaires et dinté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 dentréeCopyright © BreizhJug
  58. 58. Retour d’expérience Ekino • Framework de batch – Moins de code produit, moins derreurs possibles – Plus de tests unitaires + intégrations • Mise en place par lexemple – Jai 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étierCopyright © BreizhJug
  59. 59. Retour d’expérience Ekino • Nos batchs « Spring Batch » sont en SQL plutôt quen Hibernate • Spring Batch soccupe 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 à 1mn30sCopyright © BreizhJug
  60. 60. Des questions, avant la suite ?Copyright © BreizhJug http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/
  61. 61. Spring Batch Allons plus loinCopyright © BreizhJug
  62. 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 partitionnementCopyright © BreizhJug
  63. 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 ENDCopyright © BreizhJug
  64. 64. Maître détail RecipeStep Chunkorientedtasklet ItemReader ItemProcessor ItemWriterCopyright © BreizhJug
  65. 65. Maître détail Déclaration du JobCopyright © BreizhJug
  66. 66. Maître détail Déclaration du reader customCopyright © BreizhJug
  67. 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 ENDCopyright © BreizhJug
  68. 68. Maître détail Déclaration du reader déléguéCopyright © BreizhJug
  69. 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édemmentCopyright © BreizhJug
  70. 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 relancerCopyright © BreizhJug
  71. 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. 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. 73. Reprise sur erreur: Skip – Si FlatFileException, Spring Batch skip l’item – Skip de 10 items max – Au-delà la step « failed » – Include/Exclude possibleCopyright © BreizhJug
  74. 74. Reprise sur erreur: Skip • Personnaliser la gestion du « skip » • Par défaut: LimitCheckingItemSkipPolicyCopyright © BreizhJug
  75. 75. Reprise sur erreur: Skip • Configuration de la gestion du « skip »Copyright © BreizhJug
  76. 76. Reprise sur erreur: Skip • Un listener permet de traiter les items écartés • Les annotations existent aussi – @OnSkipInRead – @OnSkipInWrite – @OnSkipInProcessCopyright © BreizhJug
  77. 77. Reprise sur erreur: Retry http://www.libertaland.com/2011/04/une-femme-de-75-ans-coupe-tout-linternet-en-armenie/Copyright © BreizhJug
  78. 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. 79. Reprise sur erreur: Retry – Si DLDAE, Spring Batch recommence – Retry 3 fois max – Au-delà la step « failed » – Include/Exclude possibleCopyright © BreizhJug
  80. 80. Reprise sur erreur: Retry • Personnaliser le « retry »: RetryPolicy – SimpleRetryPolicy (défaut) • Stratégie entre 2 « retry »: BackoffPolicy – NoBackOffPolicy (défaut) – ExponentialBackOffPolicy vraiment utileCopyright © BreizhJug
  81. 81. Reprise sur erreur: Retry • Configuration de la gestion du « retry »Copyright © BreizhJug
  82. 82. Reprise sur erreur: Retry • Un listener permet de traiter les « retry »Copyright © BreizhJug
  83. 83. Reprise sur erreur: Retry • Pour les tasklets – RetryTemplate – RetryOperationsInterceptor avec de l’AOPCopyright © BreizhJug
  84. 84. Reprise sur erreur: Restart • Même avec skip/retry, un batch peut planter • Il reste encore une solution  • Nous pouvons redémarrer le batchCopyright © BreizhJug
  85. 85. Reprise sur erreur: Restart • Spring batch stocke des méta dataCopyright © BreizhJug
  86. 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. 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
  88. 88. Reprise sur erreur: Restart • ItemStreamCopyright © BreizhJug
  89. 89. Reprise sur erreur: Restart • Exemple de Reader « restartable »Copyright © BreizhJug
  90. 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 stepsCopyright © BreizhJug
  91. 91. Gestion du flow Le « batch bisounours » Step A Step BCopyright © BreizhJug
  92. 92. Gestion du flow ExempleCopyright © BreizhJug
  93. 93. Gestion du flow ExempleCopyright © BreizhJug
  94. 94. Gestion du flow • Le « batch complexe» Step Step Step Step Step Step Step Step StepCopyright © BreizhJug
  95. 95. Gestion du flow • Comment… – faire des flows non linéaires – piloter l’enchaînement des steps – passer des données entre stepsCopyright © BreizhJug
  96. 96. Gestion du flow • Exemple plus simple ;) StepA FAILED StepAlert * StepBCopyright © BreizhJug
  97. 97. Gestion du flowCopyright © BreizhJug
  98. 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. 99. Gestion du flow • Créer et utiliser ses propres « exit status » – StepExecutionListener – JobDeciderCopyright © BreizhJug
  100. 100. Gestion du flow • Utiliser ses propres « exit status » StepA COMPLETED WITH SKIPS StepC * StepBCopyright © BreizhJug
  101. 101. Gestion du flow • « exit status » + StepExecutionListenerCopyright © BreizhJug
  102. 102. Gestion du flow • ConfigurationCopyright © BreizhJug
  103. 103. Gestion du flow • « exit status » + JobExecutionDeciderCopyright © BreizhJug
  104. 104. Gestion du flow • ConfigurationCopyright © BreizhJug
  105. 105. Gestion du flow • Alors « StepExecutionListener » ou « JobExecutionDecider » ? – Le exit status du step est stocké comme meta data – Pas de « latebinding » avec le JobExecutionDeciderCopyright © BreizhJug
  106. 106. Gestion du flow • Encore plus de contrôle: end, failCopyright © BreizhJug
  107. 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
  108. 108. Gestion du flow • Accès à ExecutionContextCopyright © BreizhJug
  109. 109. Gestion du flow • ConfigurationCopyright © BreizhJug
  110. 110. Gestion du flow Step A • Mutualiser les flows Step B Mon Flow Step C Step DCopyright © BreizhJug
  111. 111. Gestion du flow • ConfigurationCopyright © BreizhJug
  112. 112. Gestion du flow • Réutiliser un JobCopyright © BreizhJug
  113. 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 jobsCopyright © BreizhJug
  114. 114. Scaling http://www.flickr.com/photos/claudiasofia99/2878579560/Copyright © BreizhJug
  115. 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. 116. Spring Batch in Action http://www.manning.com/templierCopyright © BreizhJug
  117. 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
  118. 118. Questions ?Copyright © BreizhJug
  119. 119. ROTI http://www.flickr.com/photos/34943981@N00/202923614/Copyright © BreizhJug

×