Ch’ti JUGSpring Batch  Mardi 29 Novembre 2011    Olivier Bazoud  Julien Jakubowski
Le mot du sponsor de cette session
Ekino / @3k1n0• Conception, développement et  maintenance de dispositifs digitaux• 150 personnes  – 50% de développeurs, 0...
Duchess France
Duchess France - PrésentationCe quest le JDuchess ...                            Et ce quil nest pas !
Duchess France - Léquipe             @Audrey_Neveu @karesti                     @agnes_crepet              @cfalguiere  @Z...
Duchess France - Objectifs   Avoir une visibilité des    femmes dans lIT ...                              … Et les inciter...
Duchess France - Les Actions
Duchess France - En chiffre        70 membres        60 membres        + de 700 followers
Duchess France - Nous suivre        http://jduchess.org/duchess-france/        duchessfr        @duchessfr
Merci de votre attention !
• http://lille.startupweekend.org
Ch’ti JUGSpring Batch  Mardi 29 Novembre 2011    Olivier Bazoud  Julien Jakubowski
IntervenantsOlivier Bazoud @obazoud, Ekino @3k1n0   ISEN (Toulon)   Architecte technique   Java EE / Spring, Spring Batch,...
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/...
Nos objectifsEn sortant de la salle, vous : Savez identifier certains problèmes récurrents  avec les batchs écrits en Jav...
Ce qui vous attend• Batch : de quoi parle-t-on ?• Pourquoi Spring Batch ?• Faisons ensemble un batch...    – Introduction ...
Batch : de quoi parle-t-on ?Batch processing = répétition de traitements sur  un ensemble de données…
Batch : de quoi parle-t-on ?… potentiellement grands volumes…     http://www.flickr.com/photos/claudiasofia99/2878579560/
Batch : de quoi parle-t-on ?… sans intervention d’un utilisateur humain – pas d’interface homme-machine
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• ...
Batch : de quoi parle-t-on ?Un batch n’est pas un scheduler• Cron, inotify, Quartz, $U…• Mais un scheduler peut le lancer
Beer Batch• Caractéristiques :   – Lire le fichier XML de recettes, au format BeerXML   – Ecrire les recettes en base de d...
Problèmes récurrents• Fiabilité
Problèmes récurrents• Maintenabilité
Problèmes récurrents• Réinvention de la roue… carrée
Quand j’écris uneapplication web…
Quand j’accède à une base     de données…
Et quand j’écris un batch ?                         Je suis… à poil ? http://www.flickr.com/photos/crystaljingsr/391472934...
Et quand j’écris un batch ?Spring Batch offre pourtant une solution pour vous guiderlors de l’écriture de vos batchs en Java
Spring Batch propose…• Un cadre• Un vocabulaire (domain language)• Traitement par lots (grands volumes de  données)• Gesti...
Spring BatchNotions de base
BeerBatch V2•   Ecrire la date de début du batch•   Lire le fichier XML de recettes, au format BeerXML•   Filtrer certaine...
Schéma du batch                  InitialStep                 InitialTasklet                  RecipeStep             Chunk ...
Tasklet                  InitialStep                 InitialTasklet                  RecipeStep             Chunk oriented...
Tasklet• Besoin  – Effectuer une tâche unitaire• Exemples  –   Supprimer un répertoire et son contenu  –   Unzip d’un fich...
Morceaux de code
ItemReader                  InitialStep                 InitialTasklet                  RecipeStep             Chunk orien...
ItemReader• Besoin  – Lire le XML de recettes• ItemReader  – Fournit des items en entrée           <xml>                  ...
Morceaux de code
ItemProcessor                   InitialStep                  InitialTasklet                   RecipeStep              Chun...
ItemProcessor• Besoin  – Transforme, valide et / ou filtre une recette• ItemProcessor  – Transforme un item en un autre  –...
Morceaux de code
Morceaux de code
ItemWriter                  InitialStep                 InitialTasklet                  RecipeStep             Chunk orien...
ItemWriter• Besoin   – Décharge les bières dans une base SQL• ItemWriter   – Ecrit les items             <xml>            ...
Morceaux de code
Chunk                  InitialStep                 InitialTasklet                  RecipeStep             Chunk oriented t...
Chunk• Besoin  – Lire, transformer et écrire• Chunk  – Lire et transformer les données successivement  – Ecrire le lot de ...
Chunk
Traitement par lots
Morceaux de code
Listener                  InitialStep                 InitialTasklet                  RecipeStep             Chunk oriente...
Listener• Besoin  – Création d’un fichier de rejet• Listener  – Etre à l’écoute des évènements du batch
Morceaux de code
Morceaux de code
Morceaux de code
Step                  InitialStep                 InitialTasklet                  RecipeStep             Chunk oriented ta...
Step• Besoin  – Etape dans le processus du batch  – Contrôle le workflow
Job                  InitialStep                 InitialTasklet                  RecipeStep             Chunk oriented tas...
Job• Besoin  – Décrire les étapes du batch  – Composé d’un ou plusieurs steps                      Spring Tools Suite
Morceaux de code
Lancer un job directement
Lancer un job            via un schedulerOn utilise ici Spring Scheduler.Il est indépendant de Spring Batch
Lancer un jobvia un scheduler
Tests• Tests unitaires facilités via le découpage Spring Batch   – writers, processors etc...• Tests dintégration facilité...
Morceaux de code
Morceaux de code
Forces et faiblesses✔Fiabilité et bons patterns✔Tests unitaires et dintégration, TDD✔Batchs complexes mieux maintenables✔B...
Retour d’expérience                 Ekino• Framework de batch  – Moins de code produit, moins derreurs possibles  – Plus d...
Retour d’expérience                Ekino• Nos batchs « Spring Batch » sont en SQL plutôt  quen Hibernate• Spring Batch soc...
Des questions,    avant la suite ?http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/
Spring BatchAllons plus loin
Recipe   Maître détail                             Hop    Hop     HopR;Burton Ale;All Grain;Brad SmithH;Goldings, East Ken...
Un batch plus robuste   reprise sur erreurs
Flow  Step A  Step B
Scaling et parallélismehttp://www.flickr.com/photos/claudiasofia99/2878579560/
Spring Batch et Hibernate
Spring Batch Admin
Allons plus loin…             Au choix!• Un cas un peu plus complexe – maître  détail• La reprise sur erreurs• Un batch qu...
Maître détailR;Burton Ale;All Grain;Brad SmithH;Goldings, East Kent;United KingdomH;Northern Brewer;GermanyH;Fuggles;Unite...
Maître détail                   RecipeStep              Chunk oriented taskletItemReader        ItemProcessor        ItemW...
Maître détailDéclaration du Job
Maître détailDéclaration du reader custom
R;Burton Ale;All Grain;Brad SmithH;Goldings, East Kent;United KingdomH;Northern Brewer;GermanyH;Fuggles;United KingdomENDR...
Maître détailDéclaration du reader délégué
A retenir• Implémentation de notre propre reader• Ré-utilisation d’un reader déjà fourni par  Spring Batch• Ré-utilisation...
Un batch plus robuste
Reprise sur erreur• Un batch plus robuste (tolérant à l’erreur)  c’est un batch :  – Qui survit à quelques données invalid...
Reprise sur erreur• Spring Batch out-of-the-box propose:  – Sauter les erreurs non bloquantes (skip)  – Recommencer un tra...
Reprise sur erreur
Reprise sur erreur: Skip     0001;ABC;DEF;     0002;ABC;DEF;     000zxjgxdjghjsdfkud     0004;ABC;DEF;• Ne pas arrêter le ...
Reprise sur erreur: Skip– Si FlatFileException, Spring Batch skip l’item– Skip de 10 items max– Au-delà la step « failed »...
Reprise sur erreur: Skip• Personnaliser la gestion du « skip »• Par défaut: LimitCheckingItemSkipPolicy
Reprise sur erreur: Skip• Configuration de la gestion du « skip »
Reprise sur erreur: Skip• Un listener permet de traiter les items  écartés• Les annotations existent aussi   – @OnSkipInRe...
Reprise sur erreur: Retry
Reprise sur erreur: Retryhttp://www.libertaland.com/2011/04/une-femme-de-75-ans-coupe-tout-linternet-en-armenie/
Reprise sur erreur: Retry• Permet de relancer une opération si  indispo temporaire• Personnaliser les cas de « retry »• Ec...
Reprise sur erreur: Retry– Si DLDAE, Spring Batch recommence– Retry 3 fois max– Au-delà la step « failed »– Include/Exclud...
Reprise sur erreur: Retry• Personnaliser le « retry »: RetryPolicy  – SimpleRetryPolicy (défaut)• Stratégie entre 2 « retr...
Reprise sur erreur: Retry• Configuration de la gestion du « retry »
Reprise sur erreur: Retry• Un listener permet de traiter les « retry »
Reprise sur erreur: Retry• Pour les tasklets  – RetryTemplate  – RetryOperationsInterceptor avec de l’AOP
Reprise sur erreur: Restart
Reprise sur erreur:              Restart• Même avec skip/retry, un batch peut  planter• Il reste encore une solution • No...
Reprise sur erreur:               Restart• Indique si le job est « restartable »• Indique le nombre max de « restart »
Reprise sur erreur:              Restart• La step est démarrée lors du restart même  si elle a été terminée correctement
Reprise sur erreur:              Restart• Comment reprendre en plein milieu d’un  chunk ?• Comment Spring Batch sait il où...
Reprise sur erreur:             Restart• Spring batch stocke des méta data
Reprise sur erreur:              Restart• Spring Batch persiste régulièrement les  « ExecutionContext »• Ceci permet à Spr...
Reprise sur erreur:              Restart• Si vous voulez que vos Reader/Writer  custom soient restartables, vous devez  le...
Reprise sur erreur:             Restart• ItemStream
Reprise sur erreur: Restart• Exemple de Reader « restartable »
Reprise sur erreur            Conclusion• Nous avons appris comment:  – Ecarter des items défectueux (skip)  – Recommencer...
Gestion du flow
Gestion du flowLe « batch bisounours »                      Step A                      Step B
Gestion du flowExemple
Gestion du flowExemple
Gestion du flow• Le « batch complexe»                         Step          Step                  Step          Step      ...
Gestion du flow• Comment… – faire des flows non linéaires – piloter l’enchaînement des steps – passer des données entre st...
Gestion du flow• Exemple plus simple ;)                              StepA                     FAILED         StepAlert   ...
Gestion du flow
Gestion du flow• Batch Status  – Etat du job / step en cours d’exécution• Exit Status  – Etat du job ou step après son exé...
Gestion du flow• Créer et utiliser ses propres « exit status »  – StepExecutionListener  – JobDecider
Gestion du flow• Utiliser ses propres « exit status »                                 StepA          COMPLETED WITH SKIPS ...
Gestion du flow• « exit status » + StepExecutionListener
Gestion du flow• Configuration
Gestion du flow• « exit status » + JobExecutionDecider
Gestion du flow• Configuration
Gestion du flow• « StepExecutionListener » ou  « JobExecutionDecider » ?• JobExecutionDecider pour réutiliser plus  facile...
Gestion du flow• Encore plus de contrôle: end, fail
Gestion du flow• Partager des informations entre les steps  – À la Spring:bean classic  – A la Spring Batch: « Execution c...
Gestion du flow• Accès à ExecutionContext
Gestion du flow• Configuration
Gestion du flow                         Step A• Mutualiser les flows                         Step B   Mon                 ...
Gestion du flow• Configuration
Gestion du flow• Réutiliser un Job
Gestion du flow• Conclusion, nous avons  – Fait des flows non linéaires  – Piloté l’enchaînement des steps  – Passé des do...
Scalinghttp://www.flickr.com/photos/claudiasofia99/2878579560/
Scaling• Différentes stratégies possibles  – Multi-threaded Step (single process)  – Parallel Steps (single process)  – Re...
Spring Batch in Actionhttp://www.manning.com/templier
Liens• Spring User Group Paris   – http://groups.google.fr/group/sugfr• Le code de la présentation   – https://github.com/...
Questions ?
Quizz
Quizz 1Ce que nest pas Spring Batch ?1. un framework orienté batchs2. un scheduler3. un framework open source
Quizz 2Qui est le principal leader du projet Spring Batch ?1. Antonio Goncalves2. Obi-wan Kenobi3. Dave Syer
Quizz 3Comment sappelle le format standard de description de recette de bière ?1. BeerXML2. ISO-16643. ChtixML
Quizz 4Qui vous offre un exemplaire de « Spring Batch in Action »?1. Sais pas, je viens de me réveiller2. Ekino3. Chubaka
Quizz 5Comment sappelle la console d’admin de Spring Batch ?1. Coldfusion Web Console2. Spring Batch Admin3. PlayScala
Quizz 6Qui vous offre le buffet de cette session ?1. Sais pas, je viens de me réveiller   (mais c’est vrai qu’il fait faim...
ROTIhttp://www.flickr.com/photos/34943981@N00/202923614/
Session « Spring Batch »• Ekino  – http://www.ekino.com / @3k1n0  – Olivier Bazoud @obazoud• Octo Technology  – http://www...
Spring Batch et Hibernate
Spring Batch et             Hibernate• Raison d’utiliser Hibernate avec Spring  Batch: code existant  rapidité de  dévelo...
Spring Batch et              Hibernate• Overhead de Hibernate sur JDBC• Hibernate est stateful (par défaut)  – 1M d’items ...
Spring Batch et              HibernateCorrectifs possibles pour pb stateful:• Ne pas faire d’Hibernate ;-)• Utiliser Hiber...
Spring Batch et              Hibernate• OK je suis un bon élève, j’utilise  HibernateCursorItemReader• Maintenant, je fonc...
Spring Batch et Hibernate• Pattern: « Driving Query Based  ItemReaders »• Certaines bases de données (ex: DB2)  – Pessimit...
Spring Batch et Hibernate• Principe  – Le reader lit les ids via SQL     • Select id from XXX where …  – Le premier ItemPr...
Spring Batch Admin• Console Web pour Spring Batch  – « Standalone » ou « Embedded »  – API Rest  – Uploader une nouvelle c...
Spring Batch Admin                • API REST
Spring Batch Admin$ curl –s http://localhost:8080/spring-batch-admin-sample/jobs.json {     "jobs": {       "resource": "h...
Spring Batch Admin• Les jobs
Spring Batch Admin• Lancement / Historique d’un job
Spring Batch Admin• Lancer un job
Spring Batch Admin• Détail d’un job execution
Spring Batch Admin     • Détail d’éxécution
Spring Batch Admin /               Monitoring• JMX / MBean  – BatchMBeanExporter     • Exporter un jobService     • Voir l...
Spring Batch Admin /     Monitoring
Spring Batch Admin /     Monitoring
Scalinghttp://www.flickr.com/photos/claudiasofia99/2878579560/
Scaling
Scaling• Différentes stratégies possibles  – Multi-threaded Step (single process)  – Parallel Steps (single process)  – Re...
Scaling• Multi-threaded Step  – Une Step est multi threaded• Parallel Steps  – Les Steps sont exécutées en parallèle• Remo...
Scaling: Multi-threaded Step– Multi thread au niveau « Step »– Utilise un ThreadPoolTaskExecutor– Chaque thread construit ...
Scaling: Multi-threaded Step
Scaling: Step en parallèle• Executer plusieurs Step en parallèle• Mot clé « split » dans la configuration• Possibilité uti...
Scaling: Step en parallèle
Scaling: Remote Chunking• Répartition de la charge vers des slaves• Principe  – Lecture sur le Master  – Processor et Writ...
Scaling: Remote Chunking                          Master                           Chunk                          Processo...
Scaling: Remote               Chunking• Démo ?!
Scaling: Partitioning• Répartir les données suivant une clé de  partition  – « Partitionner »• Traiter les données  – « Pa...
Scaling: Partitioning
Chtijug springbatch 2011
Chtijug springbatch 2011
Chtijug springbatch 2011
Prochain SlideShare
Chargement dans…5
×

Chtijug springbatch 2011

2 165 vues

Publié le

http://chtijug.org/session-spring-batch-avec-ekino-le-29-novembre/

Nous avons le plaisir de vous annoncer que la prochaine session du Ch’ti JUG est prévue le 29 novembre 2011. Elle aura lieu à l’IUT A de Lille 1, boulevard Paul Langevin, à Villeneuve d’Ascq. Plan d’accès

Le thème de cette session est Spring Batch : un framework pour implémenter des traitements de masse en Java.

Cette présentation sera animée par Olivier Bazoud / @obazoud et Julien Jakubowski / @jak78.

Cette session est rendue possible grâce à Ekino / @3k1no.

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
2 165
Sur SlideShare
0
Issues des intégrations
0
Intégrations
5
Actions
Partages
0
Téléchargements
67
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Chtijug springbatch 2011

  1. 1. Ch’ti JUGSpring Batch Mardi 29 Novembre 2011 Olivier Bazoud Julien Jakubowski
  2. 2. Le mot du sponsor de cette session
  3. 3. Ekino / @3k1n0• Conception, développement et maintenance de dispositifs digitaux• 150 personnes – 50% de développeurs, 0% de régie• Digital – Mobile + HTML + RIA – JAVA + PHP + .NET• 6 pôles de compétences, 25 clients, 50 projets/an = 1 équipe
  4. 4. Duchess France
  5. 5. Duchess France - PrésentationCe quest le JDuchess ... Et ce quil nest pas !
  6. 6. Duchess France - Léquipe @Audrey_Neveu @karesti @agnes_crepet @cfalguiere @Zazoun @dijouxellenne @MathildeLemee
  7. 7. Duchess France - Objectifs Avoir une visibilité des femmes dans lIT ... … Et les inciter à participer aux conférences
  8. 8. Duchess France - Les Actions
  9. 9. Duchess France - En chiffre 70 membres 60 membres + de 700 followers
  10. 10. Duchess France - Nous suivre http://jduchess.org/duchess-france/ duchessfr @duchessfr
  11. 11. Merci de votre attention !
  12. 12. • http://lille.startupweekend.org
  13. 13. Ch’ti JUGSpring Batch Mardi 29 Novembre 2011 Olivier Bazoud Julien Jakubowski
  14. 14. IntervenantsOlivier Bazoud @obazoud, Ekino @3k1n0 ISEN (Toulon) Architecte technique Java EE / Spring, Spring Batch, NoSQL, Node.js Co-auteur de « Spring Batch in Action » Spring User Group FranceJulien Jakubowski, @jak78, OCTO Technology ISEN (le vrai, de Lille) Architecte technique Spécialisé Java EE / Spring Chti JUG, Agile Tour Lille
  15. 15. 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/
  16. 16. Nos objectifsEn 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
  17. 17. 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 - vote• Questions / Réponses
  18. 18. Batch : de quoi parle-t-on ?Batch processing = répétition de traitements sur un ensemble de données…
  19. 19. Batch : de quoi parle-t-on ?… potentiellement grands volumes… http://www.flickr.com/photos/claudiasofia99/2878579560/
  20. 20. Batch : de quoi parle-t-on ?… sans intervention d’un utilisateur humain – pas d’interface homme-machine
  21. 21. 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• …
  22. 22. Batch : de quoi parle-t-on ?Un batch n’est pas un scheduler• Cron, inotify, Quartz, $U…• Mais un scheduler peut le lancer
  23. 23. 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
  24. 24. Problèmes récurrents• Fiabilité
  25. 25. Problèmes récurrents• Maintenabilité
  26. 26. Problèmes récurrents• Réinvention de la roue… carrée
  27. 27. Quand j’écris uneapplication web…
  28. 28. Quand j’accède à une base de données…
  29. 29. Et quand j’écris un batch ? Je suis… à poil ? http://www.flickr.com/photos/crystaljingsr/3914729343/sizes/o/in/set-72157622354789320/
  30. 30. Et quand j’écris un batch ?Spring Batch offre pourtant une solution pour vous guiderlors de l’écriture de vos batchs en Java
  31. 31. 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 Spring Batch Admin Partitionnement
  32. 32. Spring BatchNotions de base
  33. 33. 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 Spring Batch
  34. 34. Schéma du batch InitialStep InitialTasklet RecipeStep Chunk oriented taskletItemReader ItemProcessor ItemWriter
  35. 35. Tasklet InitialStep InitialTasklet RecipeStep Chunk oriented taskletItemReader ItemProcessor ItemWriter
  36. 36. 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
  37. 37. Morceaux de code
  38. 38. ItemReader InitialStep InitialTasklet RecipeStep Chunk oriented taskletItemReader ItemProcessor ItemWriter
  39. 39. ItemReader• Besoin – Lire le XML de recettes• ItemReader – Fournit des items en entrée <xml> SELECT ... FROM ... 123;AB; 456;CD;
  40. 40. Morceaux de code
  41. 41. ItemProcessor InitialStep InitialTasklet RecipeStep Chunk oriented taskletItemReader ItemProcessor ItemWriter
  42. 42. 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 »
  43. 43. Morceaux de code
  44. 44. Morceaux de code
  45. 45. ItemWriter InitialStep InitialTasklet RecipeStep Chunk oriented taskletItemReader ItemProcessor ItemWriter
  46. 46. ItemWriter• Besoin – Décharge les bières dans une base SQL• ItemWriter – Ecrit les items <xml> INSERT... INTO ... 123;AB; 456;CD;
  47. 47. Morceaux de code
  48. 48. Chunk InitialStep InitialTasklet RecipeStep Chunk oriented taskletItemReader ItemProcessor ItemWriter
  49. 49. 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
  50. 50. Chunk
  51. 51. Traitement par lots
  52. 52. Morceaux de code
  53. 53. Listener InitialStep InitialTasklet RecipeStep Chunk oriented taskletItemReader ItemProcessor ItemWriter
  54. 54. Listener• Besoin – Création d’un fichier de rejet• Listener – Etre à l’écoute des évènements du batch
  55. 55. Morceaux de code
  56. 56. Morceaux de code
  57. 57. Morceaux de code
  58. 58. Step InitialStep InitialTasklet RecipeStep Chunk oriented taskletItemReader ItemProcessor ItemWriter
  59. 59. Step• Besoin – Etape dans le processus du batch – Contrôle le workflow
  60. 60. Job InitialStep InitialTasklet RecipeStep Chunk oriented taskletItemReader ItemProcessor ItemWriter
  61. 61. Job• Besoin – Décrire les étapes du batch – Composé d’un ou plusieurs steps Spring Tools Suite
  62. 62. Morceaux de code
  63. 63. Lancer un job directement
  64. 64. Lancer un job via un schedulerOn utilise ici Spring Scheduler.Il est indépendant de Spring Batch
  65. 65. Lancer un jobvia un scheduler
  66. 66. Tests• Tests unitaires facilités via le découpage Spring Batch – writers, processors etc...• Tests dintégration facilités par Spring – @RunWith – Step, Job
  67. 67. Morceaux de code
  68. 68. Morceaux de code
  69. 69. 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 Spring way, intégration à Spring✔Productivité, à terme...✗… après avoir payé le ticket dentrée
  70. 70. 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étier
  71. 71. 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 à 1mn30s
  72. 72. Des questions, avant la suite ?http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/
  73. 73. Spring BatchAllons plus loin
  74. 74. Recipe Maître détail Hop Hop HopR;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
  75. 75. Un batch plus robuste reprise sur erreurs
  76. 76. Flow Step A Step B
  77. 77. Scaling et parallélismehttp://www.flickr.com/photos/claudiasofia99/2878579560/
  78. 78. Spring Batch et Hibernate
  79. 79. Spring Batch Admin
  80. 80. Allons plus loin… Au choix!• Un cas un peu plus complexe – maître détail• La reprise sur erreurs• Un batch qui n’a pas un flow de bisounours…• Scaling et parallélisme• Spring Batch et Hibernate• Spring Batch Admin
  81. 81. Maître détailR;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
  82. 82. Maître détail RecipeStep Chunk oriented taskletItemReader ItemProcessor ItemWriter
  83. 83. Maître détailDéclaration du Job
  84. 84. Maître détailDéclaration du reader custom
  85. 85. 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
  86. 86. Maître détailDéclaration du reader délégué
  87. 87. 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
  88. 88. Un batch plus robuste
  89. 89. 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
  90. 90. 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)
  91. 91. Reprise sur erreur
  92. 92. 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 »
  93. 93. Reprise sur erreur: Skip– Si FlatFileException, Spring Batch skip l’item– Skip de 10 items max– Au-delà la step « failed »– Include/Exclude possible
  94. 94. Reprise sur erreur: Skip• Personnaliser la gestion du « skip »• Par défaut: LimitCheckingItemSkipPolicy
  95. 95. Reprise sur erreur: Skip• Configuration de la gestion du « skip »
  96. 96. Reprise sur erreur: Skip• Un listener permet de traiter les items écartés• Les annotations existent aussi – @OnSkipInRead – @OnSkipInWrite – @OnSkipInProcess
  97. 97. Reprise sur erreur: Retry
  98. 98. Reprise sur erreur: Retryhttp://www.libertaland.com/2011/04/une-femme-de-75-ans-coupe-tout-linternet-en-armenie/
  99. 99. Reprise sur erreur: Retry• Permet de relancer une opération si indispo temporaire• Personnaliser les cas de « retry »• Ecouter les cas de « retry »
  100. 100. Reprise sur erreur: Retry– Si DLDAE, Spring Batch recommence– Retry 3 fois max– Au-delà la step « failed »– Include/Exclude possible
  101. 101. Reprise sur erreur: Retry• Personnaliser le « retry »: RetryPolicy – SimpleRetryPolicy (défaut)• Stratégie entre 2 « retry »: BackoffPolicy – NoBackOffPolicy (défaut) – ExponentialBackOffPolicy vraiment utile
  102. 102. Reprise sur erreur: Retry• Configuration de la gestion du « retry »
  103. 103. Reprise sur erreur: Retry• Un listener permet de traiter les « retry »
  104. 104. Reprise sur erreur: Retry• Pour les tasklets – RetryTemplate – RetryOperationsInterceptor avec de l’AOP
  105. 105. Reprise sur erreur: Restart
  106. 106. Reprise sur erreur: Restart• Même avec skip/retry, un batch peut planter• Il reste encore une solution • Nous pouvons redémarrer le batch
  107. 107. Reprise sur erreur: Restart• Indique si le job est « restartable »• Indique le nombre max de « restart »
  108. 108. Reprise sur erreur: Restart• La step est démarrée lors du restart même si elle a été terminée correctement
  109. 109. Reprise sur erreur: Restart• Comment reprendre en plein milieu d’un chunk ?• Comment Spring Batch sait il où reprend ?
  110. 110. Reprise sur erreur: Restart• Spring batch stocke des méta data
  111. 111. 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 »
  112. 112. 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.
  113. 113. Reprise sur erreur: Restart• ItemStream
  114. 114. Reprise sur erreur: Restart• Exemple de Reader « restartable »
  115. 115. Reprise sur erreur Conclusion• Nous avons appris comment: – Ecarter des items défectueux (skip) – Recommencer une 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
  116. 116. Gestion du flow
  117. 117. Gestion du flowLe « batch bisounours » Step A Step B
  118. 118. Gestion du flowExemple
  119. 119. Gestion du flowExemple
  120. 120. Gestion du flow• Le « batch complexe» Step Step Step Step Step Step Step Step Step
  121. 121. Gestion du flow• Comment… – faire des flows non linéaires – piloter l’enchaînement des steps – passer des données entre steps
  122. 122. Gestion du flow• Exemple plus simple ;) StepA FAILED StepAlert * StepB
  123. 123. Gestion du flow
  124. 124. Gestion du flow• Batch Status – Etat du job / step en cours d’exécution• Exit Status – Etat du job ou step après son exécution – C’est lui qui détermine le flow• Exemple – COMPLETED, STARTING, STARTED, STOPPING, STOPPED, FAILED,ABANDONED or UNKNOWN – C?T (CAT mais pas COUNT), C*T (CAT et COUNT)
  125. 125. Gestion du flow• Créer et utiliser ses propres « exit status » – StepExecutionListener – JobDecider
  126. 126. Gestion du flow• Utiliser ses propres « exit status » StepA COMPLETED WITH SKIPS StepC * StepB
  127. 127. Gestion du flow• « exit status » + StepExecutionListener
  128. 128. Gestion du flow• Configuration
  129. 129. Gestion du flow• « exit status » + JobExecutionDecider
  130. 130. Gestion du flow• Configuration
  131. 131. Gestion du flow• « StepExecutionListener » ou « JobExecutionDecider » ?• JobExecutionDecider pour réutiliser plus facilement la logique de branchement
  132. 132. Gestion du flow• Encore plus de contrôle: end, fail
  133. 133. 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]}
  134. 134. Gestion du flow• Accès à ExecutionContext
  135. 135. Gestion du flow• Configuration
  136. 136. Gestion du flow Step A• Mutualiser les flows Step B Mon Flow Step C Step D
  137. 137. Gestion du flow• Configuration
  138. 138. Gestion du flow• Réutiliser un Job
  139. 139. 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
  140. 140. Scalinghttp://www.flickr.com/photos/claudiasofia99/2878579560/
  141. 141. 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)
  142. 142. Spring Batch in Actionhttp://www.manning.com/templier
  143. 143. Liens• Spring User Group Paris – http://groups.google.fr/group/sugfr• Le code de la présentation – https://github.com/obazoud/spring-batch-sug• 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/
  144. 144. Questions ?
  145. 145. Quizz
  146. 146. Quizz 1Ce que nest pas Spring Batch ?1. un framework orienté batchs2. un scheduler3. un framework open source
  147. 147. Quizz 2Qui est le principal leader du projet Spring Batch ?1. Antonio Goncalves2. Obi-wan Kenobi3. Dave Syer
  148. 148. Quizz 3Comment sappelle le format standard de description de recette de bière ?1. BeerXML2. ISO-16643. ChtixML
  149. 149. Quizz 4Qui vous offre un exemplaire de « Spring Batch in Action »?1. Sais pas, je viens de me réveiller2. Ekino3. Chubaka
  150. 150. Quizz 5Comment sappelle la console d’admin de Spring Batch ?1. Coldfusion Web Console2. Spring Batch Admin3. PlayScala
  151. 151. Quizz 6Qui vous offre le buffet de cette session ?1. Sais pas, je viens de me réveiller (mais c’est vrai qu’il fait faim!)2. Linus Torvald3. Ekino
  152. 152. ROTIhttp://www.flickr.com/photos/34943981@N00/202923614/
  153. 153. Session « Spring Batch »• Ekino – http://www.ekino.com / @3k1n0 – Olivier Bazoud @obazoud• Octo Technology – http://www.octo.com / @ OCTOTechnology – Julien Jakubowski @jak78
  154. 154. Spring Batch et Hibernate
  155. 155. Spring Batch et Hibernate• Raison d’utiliser Hibernate avec Spring Batch: code existant  rapidité de développement• Ca ne se fait pas sans dangers…
  156. 156. Spring Batch et Hibernate• Overhead de Hibernate sur JDBC• Hibernate est stateful (par défaut) – 1M d’items lus = 1M maintenus en RAM  OutOfMemoryError
  157. 157. Spring Batch et HibernateCorrectifs possibles pour pb stateful:• Ne pas faire d’Hibernate ;-)• Utiliser HibernateCustomItemReader – Session stateless• Ajuster le commit interval
  158. 158. Spring Batch et Hibernate• OK je suis un bon élève, j’utilise HibernateCursorItemReader• Maintenant, je fonce…• Mais attention au select N+1
  159. 159. Spring Batch et Hibernate• Pattern: « Driving Query Based ItemReaders »• Certaines bases de données (ex: DB2) – Pessimitic looking – Ouverture de curseurs sur des données importantes• Bonne pratique avec Hibernate• Prévient les LazyException
  160. 160. Spring Batch et Hibernate• Principe – Le reader lit les ids via SQL • Select id from XXX where … – Le premier ItemProcessor transforme l’id en objet via Hibernate par exemple – Les autres processors font les traitements métiers –…
  161. 161. Spring Batch Admin• Console Web pour Spring Batch – « Standalone » ou « Embedded » – API Rest – Uploader une nouvelle configuration – Uploader un fichier à traiter• « Customisable » – Base de données, Branding, UI, ..• Monitorer les batchs
  162. 162. Spring Batch Admin • API REST
  163. 163. Spring Batch Admin$ curl –s http://localhost:8080/spring-batch-admin-sample/jobs.json { "jobs": { "resource": "http://localhost:8080/spring-batch-admin-sample/jobs.json", "registrations": { "infinite": { "name": "infinite", "resource": "http://localhost:8080/spring-batch-admin-sample/jobs/infinite.json", "description": "No description", "executionCount": 0, "launchable": true, "incrementable": false }, "job1": { "name": "job1", "resource": "http://localhost:8080/spring-batch-admin-sample/jobs/job1.json", "description": "No description", "executionCount": 0, "launchable": true, "incrementable": true …
  164. 164. Spring Batch Admin• Les jobs
  165. 165. Spring Batch Admin• Lancement / Historique d’un job
  166. 166. Spring Batch Admin• Lancer un job
  167. 167. Spring Batch Admin• Détail d’un job execution
  168. 168. Spring Batch Admin • Détail d’éxécution
  169. 169. Spring Batch Admin / Monitoring• JMX / MBean – BatchMBeanExporter • Exporter un jobService • Voir les métriques des « Job/Steps Executions » – SLA StepExecutionServiceLevelMonitor • Permet de recevoir des notifications JMX si une Step met trop de temps• Utilisable aussi en Standalone
  170. 170. Spring Batch Admin / Monitoring
  171. 171. Spring Batch Admin / Monitoring
  172. 172. Scalinghttp://www.flickr.com/photos/claudiasofia99/2878579560/
  173. 173. Scaling
  174. 174. 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)
  175. 175. Scaling• Multi-threaded Step – Une Step est multi threaded• Parallel Steps – Les Steps sont exécutées en parallèle• Remote Chunking of Step – Distribution des chunks• Partitioning a Step – Partage les données à travers les noeuds
  176. 176. Scaling: Multi-threaded Step– Multi thread au niveau « Step »– Utilise un ThreadPoolTaskExecutor– Chaque thread construit un chunk– Les readers/writers sont thread-safe ? • La plus part non, ils sont stateful– « Process Indicator Pattern » • Lire les items ‘processed’ = false • Un ItemProcessor met ‘processed = true’
  177. 177. Scaling: Multi-threaded Step
  178. 178. Scaling: Step en parallèle• Executer plusieurs Step en parallèle• Mot clé « split » dans la configuration• Possibilité utiliser un ThreadPoolTaskExecutor
  179. 179. Scaling: Step en parallèle
  180. 180. Scaling: Remote Chunking• Répartition de la charge vers des slaves• Principe – Lecture sur le Master – Processor et Writer sur les slaves• Spring Batch propose que des interfaces• Spring Integration propose une implementation• La communication master/slave se fait à travers un MOM
  181. 181. Scaling: Remote Chunking Master Chunk Processor Reader Chunk Provider Slave 1 Slave 2 Slave N Chunk Writer Chunk Writer Chunk WriterProcessor Processor Processor
  182. 182. Scaling: Remote Chunking• Démo ?!
  183. 183. Scaling: Partitioning• Répartir les données suivant une clé de partition – « Partitionner »• Traiter les données – « PartitionHandler »• Et vous pouvez combiner les techniques précédentes
  184. 184. Scaling: Partitioning

×