Spring Batch                        Lundi 6 Juin 2011Copyright © BreizhJug
Intervenants       Olivier Bazoud, @obazoud, Ekino (FullSIX Group)              Architecte technique de sites web à fort t...
De quoi va-t-on parler ce soir ?       • On va parler de batchs en Java       • … et aussi de bièreCopyright © BreizhJug  ...
Nos objectifs       En sortant de la salle, vous :       Savez identifier certains problèmes récurrents        avec les b...
Ce qui vous attend       • Batch : de quoi parle-t-on ?       • Pourquoi Spring Batch ?       • Faisons ensemble un batch....
Batch : de quoi parle-t-on ?       Batch processing = suite de traitements sur         ensemble de données…Copyright © Bre...
Batch : de quoi parle-t-on ?       … potentiellement grands volumes…                        http://www.flickr.com/photos/c...
Batch : de quoi parle-t-on ?       … sans intervention d’un utilisateur humain – pas        d’interface homme-machineCopyr...
Batch : de quoi parle-t-on ?       Exemples:       • Import flat / XML dans une base de données       • Mise à jour de don...
Batch : de quoi parle-t-on ?       Un batch n’est pas un scheduler       • Cron, Quartz, $U…       • Mais un scheduler peu...
Beer Batch       • Caractéristiques :              – Lire le fichier XML de recettes, au format BeerXML              – Ecr...
Problèmes récurrents       • FiabilitéCopyright © BreizhJug
Problèmes récurrents       • MaintenabilitéCopyright © BreizhJug
Problèmes récurrents       • Réinvention de la roue… carréeCopyright © BreizhJug
Quand j’écris une                        application web…Copyright © BreizhJug
Quand j’accède à une base                             de données…Copyright © BreizhJug
Et quand j’écris un batch ?                                                Je suis… à poil ?                        http:/...
Et quand j’écris un batch ?           Spring Batch offre pourtant une solution pour vous guider           lors de l’écritu...
Spring Batch propose…       • Un cadre       • Un vocabulaire (domainlanguage)       • Traitement par lots (grands volumes...
Spring Batch                        Notions de baseCopyright © BreizhJug
BeerBatch V2       •    Ecrire la date de début du batch       •    Lire le fichier XML de recettes, au format BeerXML    ...
Schéma du batch                                          InitialStep                                         InitialTaskle...
ItemReader                                          InitialStep                                         InitialTasklet    ...
ItemReader       • Besoin              – Lire le XML de recettes       • ItemReader              – Fournit des items en en...
Morceaux de codeCopyright © BreizhJug
ItemProcessor                                          InitialStep                                         InitialTasklet ...
ItemProcessor       • Besoin              – Transforme, valide et / ou filtre une recette       • ItemProcessor           ...
Morceaux de codeCopyright © BreizhJug
Morceaux de codeCopyright © BreizhJug
ItemWriter                                          InitialStep                                         InitialTasklet    ...
ItemWriter       • Besoin              – Décharge les bières dans une base SQL       • ItemWriter              – Ecrit les...
Morceaux de codeCopyright © BreizhJug
Chunk                                          InitialStep                                         InitialTasklet         ...
Chunk       • Besoin              – Lire, transformer et écrire       • Chunk              – Lire et transformer les donné...
ChunkCopyright © BreizhJug
Traitement par lotsCopyright © BreizhJug
Morceaux de codeCopyright © BreizhJug
Listener                                          InitialStep                                         InitialTasklet      ...
Listener       • Besoin              – Création d’un fichier de rejet       • Listener              – Etre à l’écoute des ...
Morceaux de codeCopyright © BreizhJug
Morceaux de codeCopyright © BreizhJug
Morceaux de codeCopyright © BreizhJug
Tasklet                                          InitialStep                                         InitialTasklet       ...
Tasklet       • Besoin              – Effectuer une tâche unitaire       • Exemples              –    Supprimer un réperto...
Morceaux de codeCopyright © BreizhJug
Step                                          InitialStep                                         InitialTasklet          ...
Step       • Besoin              – Etape dans le processus du batch              – Contrôle le workflowCopyright © BreizhJug
Job                                          InitialStep                                         InitialTasklet           ...
Job       • Besoin              – Décrire les étapes du batch              – Composé d’un ou plusieurs stepsCopyright © Br...
Morceaux de codeCopyright © BreizhJug
Lancer un job                         directementCopyright © BreizhJug
Lancer un job                           via un scheduler               On utilise ici SpringScheduler.               Il es...
Lancer un job                        via un schedulerCopyright © BreizhJug
Tests       • Tests unitaires facilités via le découpage Spring Batch          – writers, processors etc...       • Tests ...
Morceaux de codeCopyright © BreizhJug
Morceaux de codeCopyright © BreizhJug
Forces et faiblesses       ✔Fiabilité et bons patterns       ✔Tests unitaires et dintégration, TDD       ✔Batchs complexes...
Retour d’expérience                                    Ekino       • Framework de batch              – Moins de code produ...
Retour d’expérience                                  Ekino       • Nos batchs « Spring Batch » sont en SQL plutôt         ...
Des questions,                                  avant la suite ?Copyright © BreizhJug   http://www.flickr.com/photos/cryst...
Spring Batch                         Allons plus loinCopyright © BreizhJug
Allons plus loin…       • Un cas un peu plus complexe – maître         détail       • La reprise sur erreurs       • Un ba...
Maître détail        R;BurtonAle;AllGrain;Brad Smith        H;Goldings, East Kent;UnitedKingdom        H;NorthernBrewer;Ge...
Maître détail                                         RecipeStep                                     Chunkorientedtasklet ...
Maître détail                        Déclaration du JobCopyright © BreizhJug
Maître détail                        Déclaration du reader customCopyright © BreizhJug
R;BurtonAle;AllGrain;Brad Smith                        H;Goldings, East Kent;UnitedKingdom                        H;Northe...
Maître détail                        Déclaration du reader déléguéCopyright © BreizhJug
A retenir       • Implémentation de notre propre reader       • Ré-utilisation d’un reader déjà fourni par         Spring ...
Reprise sur erreur       • Un batch plus robuste (tolérant à l’erreur)         c’est un batch :              – Qui survit ...
Reprise sur erreur       • Spring Batch out-of-the-box propose:              – Sauter les erreurs non bloquantes (skip)   ...
Reprise sur erreur: Skip                        0001;ABC;DEF;                        0002;ABC;DEF;                        ...
Reprise sur erreur: Skip              – Si FlatFileException, Spring Batch skip l’item              – Skip de 10 items max...
Reprise sur erreur: Skip       • Personnaliser la gestion du « skip »       • Par défaut: LimitCheckingItemSkipPolicyCopyr...
Reprise sur erreur: Skip       • Configuration de la gestion du « skip »Copyright © BreizhJug
Reprise sur erreur: Skip       • Un listener permet de traiter les items         écartés        • Les annotations existent...
Reprise sur erreur: Retry                        http://www.libertaland.com/2011/04/une-femme-de-75-ans-coupe-tout-lintern...
Reprise sur erreur: Retry       • Permet de relancer une opération si         indispo temporaire       • Personnaliser les...
Reprise sur erreur: Retry       – Si DLDAE, Spring Batch recommence       – Retry 3 fois max       – Au-delà la step « fai...
Reprise sur erreur: Retry       • Personnaliser le « retry »: RetryPolicy              – SimpleRetryPolicy (défaut)       ...
Reprise sur erreur: Retry       • Configuration de la gestion du « retry »Copyright © BreizhJug
Reprise sur erreur: Retry       • Un listener permet de traiter les « retry »Copyright © BreizhJug
Reprise sur erreur: Retry       • Pour les tasklets              – RetryTemplate              – RetryOperationsInterceptor...
Reprise sur erreur:                             Restart       • Même avec skip/retry, un batch peut         planter       ...
Reprise sur erreur:                             Restart       • Spring batch stocke des méta dataCopyright © BreizhJug
Reprise sur erreur:                             Restart       • Spring Batch persiste régulièrement les         « Executio...
Reprise sur erreur:                             Restart       • Si vous voulez que vos Reader/Writer         custom soient...
Reprise sur erreur:                             Restart       • ItemStreamCopyright © BreizhJug
Reprise sur erreur:                             Restart       • Exemple de Reader « restartable »Copyright © BreizhJug
Reprise sur erreur                             Conclusion       • Nous savons:              – Ecarter des items défectueux...
Gestion du flow       Le « batch bisounours »                             Step A                             Step BCopyrig...
Gestion du flow       ExempleCopyright © BreizhJug
Gestion du flow       ExempleCopyright © BreizhJug
Gestion du flow       • Le « batch complexe»                                     Step                        Step         ...
Gestion du flow       • Comment…              – faire des flows non linéaires              – piloter l’enchaînement des st...
Gestion du flow       • Exemple plus simple ;)                                              StepA                         ...
Gestion du flowCopyright © BreizhJug
Gestion du flow       • Batch Status              – Représente le status du job ou step       • Exit Status              –...
Gestion du flow       • Créer et utiliser ses propres « exit status »              – StepExecutionListener              – ...
Gestion du flow       • Utiliser ses propres « exit status »                                                    StepA     ...
Gestion du flow       • « exit status » + StepExecutionListenerCopyright © BreizhJug
Gestion du flow       • ConfigurationCopyright © BreizhJug
Gestion du flow       • « exit status » + JobExecutionDeciderCopyright © BreizhJug
Gestion du flow       • ConfigurationCopyright © BreizhJug
Gestion du flow       • Alors « StepExecutionListener » ou         « JobExecutionDecider » ?              – Le exit status...
Gestion du flow       • Encore plus de contrôle: end, failCopyright © BreizhJug
Gestion du flow       • Partager des informations entre les steps              – À la Spring:beanclassic              – A ...
Gestion du flow       • Accès à ExecutionContextCopyright © BreizhJug
Gestion du flow       • ConfigurationCopyright © BreizhJug
Gestion du flow                                Step A       • Mutualiser les flows                                Step B  ...
Gestion du flow       • ConfigurationCopyright © BreizhJug
Gestion du flow       • Réutiliser un JobCopyright © BreizhJug
Gestion du flow       • Conclusion, nous avons              – Fait des flows non linéaires              – Piloté l’enchaîn...
Scaling                http://www.flickr.com/photos/claudiasofia99/2878579560/Copyright © BreizhJug
Scaling       • Différentes stratégies possibles              – Multi-threaded Step (single process)              – Parall...
Spring Batch in Action            http://www.manning.com/templierCopyright © BreizhJug
Liens       • Spring User Group Paris              – http://groups.google.fr/group/sugfr       • Le code de la présentatio...
Questions ?Copyright © BreizhJug
ROTI                        http://www.flickr.com/photos/34943981@N00/202923614/Copyright © BreizhJug
Prochain SlideShare
Chargement dans…5
×

Breizhjug spring batch 2011

1 364 vues

Publié le

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

Publié dans : Technologie
1 commentaire
1 j’aime
Statistiques
Remarques
Aucun téléchargement
Vues
Nombre de vues
1 364
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1
Actions
Partages
0
Téléchargements
102
Commentaires
1
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

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

×