SlideShare une entreprise Scribd logo
1  sur  119
Spring Batch
                        Lundi 6 Juin 2011




Copyright © BreizhJug
Intervenants
       Olivier Bazoud, @obazoud, Ekino (FullSIX Group)
              Architecte technique de sites web à fort traffic
              Java EE / Spring, Spring Batch, Groovy, Grails
              Co-auteur de « Spring Batch in Action »
              Spring User Group France


       Julien Jakubowski, @jak78, OCTO Technology
              Architecte technique
              Spécialisé Java EE / Spring
              Productivité et qualité des développements
              Ch'ti JUG, Agile Tour Lille


Copyright © BreizhJug
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/
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
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
Batch : de quoi parle-t-on ?
       Batch processing = suite de traitements sur
         ensemble de données…




Copyright © BreizhJug
Batch : de quoi parle-t-on ?
       … potentiellement grands volumes…




                        http://www.flickr.com/photos/claudiasofia99/2878579560/

Copyright © BreizhJug
Batch : de quoi parle-t-on ?
       … sans intervention d’un utilisateur humain – pas
        d’interface homme-machine




Copyright © BreizhJug
Batch : de quoi parle-t-on ?
       Exemples:
       • Import flat / XML dans une base de données
       • Mise à jour de données de référentiel
       • Intégration de flux financiers dans un SI
       • …




Copyright © BreizhJug
Batch : de quoi parle-t-on ?
       Un batch n’est pas un scheduler
       • Cron, Quartz, $U…
       • Mais un scheduler peut le lancer




Copyright © BreizhJug
Beer Batch
       • Caractéristiques :
              – Lire le fichier XML de recettes, au format BeerXML
              – Ecrire les recettes en base de données
              – Filtrer certaines recettes et créer un fichier de rejets




Copyright © BreizhJug
Problèmes récurrents
       • Fiabilité




Copyright © BreizhJug
Problèmes récurrents
       • Maintenabilité




Copyright © BreizhJug
Problèmes récurrents
       • Réinvention de la roue… carrée




Copyright © 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://www.flickr.com/photos/crystaljingsr/3914729343/sizes/o/in/set-72157622354789320/
Copyright © BreizhJug
Et quand j’écris un batch ?

           Spring Batch offre pourtant une solution pour vous guider
           lors de l’écriture de vos batchs en Java




Copyright © BreizhJug
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
Spring Batch
                        Notions de base




Copyright © BreizhJug
BeerBatch V2
       •    Ecrire la date de début du batch
       •    Lire le fichier XML de recettes, au format BeerXML
       •    Filtrer certaines recettes et créer un fichier de rejets
       •    Ecrire en base de données




Copyright © BreizhJug
Schéma du batch
                                          InitialStep
                                         InitialTasklet




                                         RecipeStep
                                     Chunkorientedtasklet

                        ItemReader      ItemProcessor       ItemWriter




Copyright © BreizhJug
ItemReader
                                          InitialStep
                                         InitialTasklet




                                         RecipeStep
                                     Chunkorientedtasklet

                        ItemReader      ItemProcessor       ItemWriter




Copyright © BreizhJug
ItemReader
       • Besoin
              – Lire le XML de recettes
       • ItemReader
              – Fournit des items en entrée




                        <xml>                 SELECT ... FROM ...

                        123;AB;
                        456;CD;


Copyright © BreizhJug
Morceaux de code




Copyright © BreizhJug
ItemProcessor
                                          InitialStep
                                         InitialTasklet




                                         RecipeStep
                                     Chunkorientedtasklet

                        ItemReader      ItemProcessor       ItemWriter




Copyright © BreizhJug
ItemProcessor
       • Besoin
              – Transforme, valide et / ou filtre une recette
       • ItemProcessor
              – Transforme un item en un autre
              – Filtrer ou rejeter un item
              – Emplacement pour les « règles métier »




Copyright © BreizhJug
Morceaux de code




Copyright © BreizhJug
Morceaux de code




Copyright © BreizhJug
ItemWriter
                                          InitialStep
                                         InitialTasklet




                                         RecipeStep
                                     Chunkorientedtasklet

                        ItemReader      ItemProcessor       ItemWriter




Copyright © BreizhJug
ItemWriter
       • Besoin
              – Décharge les bières dans une base SQL
       • ItemWriter
              – Ecrit les items




                        <xml>                  INSERT... INTO ...

                        123;AB;
                        456;CD;


Copyright © BreizhJug
Morceaux de code




Copyright © BreizhJug
Chunk
                                          InitialStep
                                         InitialTasklet




                                         RecipeStep
                                     Chunkorientedtasklet

                        ItemReader      ItemProcessor       ItemWriter




Copyright © BreizhJug
Chunk


       • Besoin
              – Lire, transformer et écrire
       • Chunk
              – Lire et transformer les données successivement
              – Ecrire le lot de données
              – Le commit-interval définit la taille du lot (différent de la taille du
                fichier)
              – Gestion de la transaction : Commit/Rollback



Copyright © BreizhJug
Chunk




Copyright © BreizhJug
Traitement par lots




Copyright © BreizhJug
Morceaux de code




Copyright © BreizhJug
Listener
                                          InitialStep
                                         InitialTasklet




                                         RecipeStep
                                     Chunkorientedtasklet

                        ItemReader      ItemProcessor       ItemWriter




Copyright © BreizhJug
Listener

       • Besoin
              – Création d’un fichier de rejet
       • Listener
              – Etre à l’écoute des évènements du batch




Copyright © BreizhJug
Morceaux de code




Copyright © BreizhJug
Morceaux de code




Copyright © BreizhJug
Morceaux de code




Copyright © BreizhJug
Tasklet
                                          InitialStep
                                         InitialTasklet




                                         RecipeStep
                                     Chunkorientedtasklet

                        ItemReader      ItemProcessor       ItemWriter




Copyright © BreizhJug
Tasklet

       • Besoin
              – Effectuer une tâche unitaire
       • Exemples
              –    Supprimer un répertoire et son contenu
              –    Unzip d’un fichier
              –    Appel d’une procédure stockée
              –    Appel d’un web service




Copyright © BreizhJug
Morceaux de code




Copyright © BreizhJug
Step
                                          InitialStep
                                         InitialTasklet




                                         RecipeStep
                                     Chunkorientedtasklet

                        ItemReader      ItemProcessor          ItemWriter




Copyright © BreizhJug
Step

       • Besoin
              – Etape dans le processus du batch
              – Contrôle le workflow




Copyright © BreizhJug
Job
                                          InitialStep
                                         InitialTasklet




                                         RecipeStep
                                     Chunkorientedtasklet

                        ItemReader      ItemProcessor           ItemWriter




Copyright © BreizhJug
Job
       • Besoin
              – Décrire les étapes du batch
              – Composé d’un ou plusieurs steps




Copyright © BreizhJug
                                  Spring Tools Suite
Morceaux de code




Copyright © BreizhJug
Lancer un job
                         directement




Copyright © BreizhJug
Lancer un job
                           via un scheduler

               On utilise ici SpringScheduler.
               Il est indépendant de Spring Batch




Copyright © BreizhJug
Lancer un job
                        via un scheduler




Copyright © BreizhJug
Tests
       • Tests unitaires facilités via le découpage Spring Batch
          – writers, processors etc...

       • Tests d'intégration facilités par Spring
          – @RunWith
          – Step, Job




Copyright © BreizhJug
Morceaux de code




Copyright © BreizhJug
Morceaux de code




Copyright © BreizhJug
Forces et faiblesses
       ✔Fiabilité et bons patterns
       ✔Tests unitaires et d'intégration, TDD
       ✔Batchs complexes mieux maintenables
       ✔Bénéficie de fonctions avancées à moindre coût
       ✔...the Springway, Spring Intégration
       ✔Productivité, à terme...
       ✗… après avoir payé le ticket d'entrée



Copyright © BreizhJug
Retour d’expérience
                                    Ekino
       • Framework de batch
              – Moins de code produit, moins d'erreurs possibles
              – Plus de tests unitaires + intégrations


       • Mise en place par l'exemple
              – J'ai fait le premier batch pour montrer la voie
              – Un même vocabulaire aide à se comprendre


       • Répond à nos besoins même si les batchs sont
         différents au niveau métier
Copyright © BreizhJug
Retour d’expérience
                                  Ekino
       • Nos batchs « Spring Batch » sont en SQL plutôt
         qu'en Hibernate
       • Spring Batch s'occupe de la gestion
         transactionnelle
       • En moyenne
              – 15% - 50% de gain sur le temps de développement
              – 15% - 50% de gain au « runtime »
       • Gains plus impressionnants sur certains cas
              – XML 100Mo + SQL; Gain : de 60 mn à 8mn
              – 10 fichiers 4Mo + SQL; Gain : de 10mn à 1mn30s

Copyright © BreizhJug
Des questions,
                                  avant la suite ?




Copyright © BreizhJug   http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/
Spring Batch
                         Allons plus loin




Copyright © BreizhJug
Allons plus loin…
       • Un cas un peu plus complexe – maître
         détail
       • La reprise sur erreurs
       • Un batch qui n’a pas un flow de
         bisounours…
       • Aperçu du parallélisme et du
         partitionnement


Copyright © BreizhJug
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
Maître détail

                                         RecipeStep

                                     Chunkorientedtasklet

                        ItemReader      ItemProcessor       ItemWriter




Copyright © BreizhJug
Maître détail
                        Déclaration du Job




Copyright © BreizhJug
Maître détail
                        Déclaration du reader custom




Copyright © BreizhJug
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
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 Batch
       • Ré-utilisation de ce que nous avons déjà
         codé précédemment




Copyright © BreizhJug
Reprise sur erreur
       • Un batch plus robuste (tolérant à l’erreur)
         c’est un batch :
              – Qui survit à quelques données invalides
              – Qui survit à une indisponibilité
              – Qu’on est en mesure de relancer




Copyright © BreizhJug
Reprise sur erreur
       • Spring Batch out-of-the-box propose:
              – Sauter les erreurs non bloquantes (skip)
              – Recommencer un traitement (retry)
              – Déterminer si le batch est fini (completion)
              – Redémarrer un batch (restart)




Copyright © BreizhJug
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
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
Reprise sur erreur: Skip
       • Personnaliser la gestion du « skip »
       • Par défaut: LimitCheckingItemSkipPolicy




Copyright © BreizhJug
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 aussi
                – @OnSkipInRead
                – @OnSkipInWrite
                – @OnSkipInProcess

Copyright © BreizhJug
Reprise sur erreur: Retry




                        http://www.libertaland.com/2011/04/une-femme-de-75-ans-coupe-tout-linternet-en-armenie/




Copyright © BreizhJug
Reprise sur erreur: Retry
       • Permet de relancer une opération si
         indispo temporaire
       • Personnaliser les cas de « retry »
       • Ecouter les cas de « retry »




Copyright © BreizhJug
Reprise sur erreur: Retry




       – Si DLDAE, Spring Batch recommence
       – Retry 3 fois max
       – Au-delà la step « failed »
       – Include/Exclude possible


Copyright © BreizhJug
Reprise sur erreur: Retry
       • Personnaliser le « retry »: RetryPolicy
              – SimpleRetryPolicy (défaut)


       • Stratégie entre 2 « retry »: BackoffPolicy
              – NoBackOffPolicy (défaut)
              – ExponentialBackOffPolicy vraiment utile




Copyright © BreizhJug
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 avec de l’AOP




Copyright © BreizhJug
Reprise sur erreur:
                             Restart
       • Même avec skip/retry, un batch peut
         planter
       • Il reste encore une solution 
       • Nous pouvons redémarrer le batch




Copyright © BreizhJug
Reprise sur erreur:
                             Restart
       • Spring batch stocke des méta data




Copyright © BreizhJug
Reprise sur erreur:
                             Restart
       • Spring Batch persiste régulièrement les
         « ExecutionContext »
       • Ceci permet à Spring Batch de savoir où
         reprendre
       • C’est ce qui fait qu’un batch est
         « restartable »




Copyright © BreizhJug
Reprise sur erreur:
                             Restart
       • Si vous voulez que vos Reader/Writer
         custom soient restartables, vous devez
         les concevoir restartables.
       • Certains fournis par Spring Batch le sont,
         mais pas tous
       • Ce n’est pas toujours possible – ex: Writer
         JMS.


Copyright © BreizhJug
Reprise sur erreur:
                             Restart
       • ItemStream




Copyright © BreizhJug
Reprise sur erreur:
                             Restart
       • Exemple de Reader « restartable »




Copyright © BreizhJug
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
Gestion du flow
       Le « batch bisounours »


                             Step A




                             Step B




Copyright © BreizhJug
Gestion du flow
       Exemple




Copyright © BreizhJug
Gestion du flow
       Exemple




Copyright © BreizhJug
Gestion du flow
       • Le « batch complexe»
                                     Step


                        Step                     Step



                        Step         Step        Step




                        Step         Step        Step



Copyright © BreizhJug
Gestion du flow
       • Comment…
              – faire des flows non linéaires
              – piloter l’enchaînement des steps
              – passer des données entre steps




Copyright © BreizhJug
Gestion du flow
       • Exemple plus simple ;)
                                              StepA

                                     FAILED
                        StepAlert


                                                  *
                                              StepB




Copyright © BreizhJug
Gestion du flow




Copyright © BreizhJug
Gestion du flow
       • Batch Status
              – Représente le status du job ou step
       • Exit Status
              – Représente le status du job ou step au final
       • Exemple
              – COMPLETED, STARTING, STARTED,
                STOPPING, STOPPED,
                FAILED,ABANDONED or UNKNOWN
              – C?T (CAT mais pas COUNT), C*T (CAT et COUNT)

Copyright © BreizhJug
Gestion du flow
       • Créer et utiliser ses propres « exit status »
              – StepExecutionListener
              – JobDecider




Copyright © BreizhJug
Gestion du flow
       • Utiliser ses propres « exit status »
                                                    StepA

                             COMPLETED WITH SKIPS
                        StepC


                                                        *
                                                    StepB




Copyright © BreizhJug
Gestion du flow
       • « exit status » + StepExecutionListener




Copyright © BreizhJug
Gestion du flow
       • Configuration




Copyright © BreizhJug
Gestion du flow
       • « exit status » + JobExecutionDecider




Copyright © BreizhJug
Gestion du flow
       • Configuration




Copyright © BreizhJug
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
Gestion du flow
       • Encore plus de contrôle: end, fail




Copyright © BreizhJug
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
Gestion du flow
       • Accès à ExecutionContext




Copyright © BreizhJug
Gestion du flow
       • Configuration




Copyright © BreizhJug
Gestion du flow
                                Step A
       • Mutualiser les flows

                                Step B    Mon
                                          Flow


                                Step C




                                Step D



Copyright © BreizhJug
Gestion du flow
       • Configuration




Copyright © BreizhJug
Gestion du flow
       • Réutiliser un Job




Copyright © BreizhJug
Gestion du flow
       • Conclusion, nous avons
              – Fait des flows non linéaires
              – Piloté l’enchaînement des steps
              – Passé des données entre steps
              – Mutualisé et réutilisé des jobs




Copyright © BreizhJug
Scaling




                http://www.flickr.com/photos/claudiasofia99/2878579560/



Copyright © BreizhJug
Scaling
       • Différentes stratégies possibles
              – Multi-threaded Step (single process)
              – Parallel Steps (single process)
              – Remote Chunking of Step (multi process)
              – Partitioning a Step (single or multi process)




Copyright © BreizhJug
Spring Batch in Action
            http://www.manning.com/templier




Copyright © BreizhJug
Liens
       • Spring User Group Paris
              – http://groups.google.fr/group/sugfr
       • Le code de la présentation
              – http://code.google.com/p/fr-sug-spring-batch
       • Spring Batch 2.1.x
              – http://static.springsource.org/spring-batch
       • Articles sur le web
              – http://www.theserverside.com/news/1363855/Spring-Batch-
                Overview
              – http://www.infoq.com/presentations/syer-introducing-spring-
                batch
              – http://blog.zenika.com/index.php?post/2010/03/05/To-batch-or-
                not-to-batch
              – http://blog.octo.com/spring-batch-par-quel-bout-le-prendre/
Copyright © BreizhJug
Questions ?




Copyright © BreizhJug
ROTI




                        http://www.flickr.com/photos/34943981@N00/202923614/
Copyright © BreizhJug

Contenu connexe

Tendances

Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Ippon
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileIppon
 
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Ippon
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computingIppon
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Ippon
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Ippon
 
Spring 3 en production
Spring 3 en productionSpring 3 en production
Spring 3 en productionJulien Dubois
 
Présentation du retour d'expérience sur Git
Présentation du retour d'expérience sur GitPrésentation du retour d'expérience sur Git
Présentation du retour d'expérience sur GitIppon
 
Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016Ippon
 
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Eric SIBER
 
Presentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationPresentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationStéphane Traumat
 
Nouveau look pour une nouvelle vie, version spéciale Ippon
Nouveau look pour une nouvelle vie, version spéciale IpponNouveau look pour une nouvelle vie, version spéciale Ippon
Nouveau look pour une nouvelle vie, version spéciale IpponJulien Dubois
 
JPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à AchillesJPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à AchillesIppon
 
Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10Jean-Michel Doudoux
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache MavenArnaud Héritier
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mareValtech
 
Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5Microsoft
 
Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement Publicis Sapient Engineering
 

Tendances (20)

Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
 
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
 
Présentation1
Présentation1Présentation1
Présentation1
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computing
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
 
Spring 3 en production
Spring 3 en productionSpring 3 en production
Spring 3 en production
 
Présentation du retour d'expérience sur Git
Présentation du retour d'expérience sur GitPrésentation du retour d'expérience sur Git
Présentation du retour d'expérience sur Git
 
Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016
 
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)
 
Presentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationPresentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub Foundation
 
Nouveau look pour une nouvelle vie, version spéciale Ippon
Nouveau look pour une nouvelle vie, version spéciale IpponNouveau look pour une nouvelle vie, version spéciale Ippon
Nouveau look pour une nouvelle vie, version spéciale Ippon
 
Spring & SpringBatch FR
Spring & SpringBatch FRSpring & SpringBatch FR
Spring & SpringBatch FR
 
JPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à AchillesJPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à Achilles
 
Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5
 
Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement
 

En vedette

Spring Batch Performance Tuning
Spring Batch Performance TuningSpring Batch Performance Tuning
Spring Batch Performance TuningGunnar Hillert
 
Spring batch for large enterprises operations
Spring batch for large enterprises operations Spring batch for large enterprises operations
Spring batch for large enterprises operations Ignasi González
 
Spring Batch - Lessons Learned out of a real life banking system.
Spring Batch - Lessons Learned out of a real life banking system.Spring Batch - Lessons Learned out of a real life banking system.
Spring Batch - Lessons Learned out of a real life banking system.Raffael Schmid
 
Parallel batch processing with spring batch slideshare
Parallel batch processing with spring batch   slideshareParallel batch processing with spring batch   slideshare
Parallel batch processing with spring batch slideshareMorten Andersen-Gott
 
La gestion des archives avec Alfresco
La gestion des archives avec AlfrescoLa gestion des archives avec Alfresco
La gestion des archives avec AlfrescoSavoir-faire Linux
 

En vedette (6)

Spring Batch Performance Tuning
Spring Batch Performance TuningSpring Batch Performance Tuning
Spring Batch Performance Tuning
 
Spring batch for large enterprises operations
Spring batch for large enterprises operations Spring batch for large enterprises operations
Spring batch for large enterprises operations
 
Spring Batch - Lessons Learned out of a real life banking system.
Spring Batch - Lessons Learned out of a real life banking system.Spring Batch - Lessons Learned out of a real life banking system.
Spring Batch - Lessons Learned out of a real life banking system.
 
ECM & SharePoint 2013
ECM & SharePoint 2013ECM & SharePoint 2013
ECM & SharePoint 2013
 
Parallel batch processing with spring batch slideshare
Parallel batch processing with spring batch   slideshareParallel batch processing with spring batch   slideshare
Parallel batch processing with spring batch slideshare
 
La gestion des archives avec Alfresco
La gestion des archives avec AlfrescoLa gestion des archives avec Alfresco
La gestion des archives avec Alfresco
 

Similaire à Breizhjug spring batch 2011

Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010JUG Lausanne
 
20180628 skill value_masterclass_reactnative - v1.3
20180628 skill value_masterclass_reactnative - v1.320180628 skill value_masterclass_reactnative - v1.3
20180628 skill value_masterclass_reactnative - v1.3Benoit Fillon
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
SkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React NativeSkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React NativeBenoit Fillon
 
La mise en cache et ses secrets
La mise en cache et ses secretsLa mise en cache et ses secrets
La mise en cache et ses secretsAymeric Bouillat
 
Améliorer l'implémentation du feature flipping
Améliorer l'implémentation du feature flippingAméliorer l'implémentation du feature flipping
Améliorer l'implémentation du feature flippingDorra BARTAGUIZ
 
7 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 2016
7 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 20167 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 2016
7 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 2016Sébastien Le Marchand
 
Optimiser réellement le référencement naturel de WordPress
Optimiser réellement le référencement naturel de WordPressOptimiser réellement le référencement naturel de WordPress
Optimiser réellement le référencement naturel de WordPressDaniel Roch - SeoMix
 
GUSS - CRITEO Meetup Scale SQL for the Web
GUSS - CRITEO Meetup Scale SQL for the WebGUSS - CRITEO Meetup Scale SQL for the Web
GUSS - CRITEO Meetup Scale SQL for the WebGUSS
 
Supports de cours Fit4Digital future - CMS
Supports de cours Fit4Digital future - CMSSupports de cours Fit4Digital future - CMS
Supports de cours Fit4Digital future - CMSAnnabelle Buffart
 
jQuery mobile / PhoneGap : contenus dynamiques client-side
jQuery mobile / PhoneGap : contenus dynamiques client-sidejQuery mobile / PhoneGap : contenus dynamiques client-side
jQuery mobile / PhoneGap : contenus dynamiques client-sidemaru.maru
 
What we've learnt from Ember.js - The family talk april 2015
What we've learnt from Ember.js - The family talk april 2015What we've learnt from Ember.js - The family talk april 2015
What we've learnt from Ember.js - The family talk april 2015Wisembly
 
"What we've learnt from Ember.js developing our new product" by Guillaume Pot...
"What we've learnt from Ember.js developing our new product" by Guillaume Pot..."What we've learnt from Ember.js developing our new product" by Guillaume Pot...
"What we've learnt from Ember.js developing our new product" by Guillaume Pot...TheFamily
 
Migrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds JavaMigrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds JavaCédric Leblond
 
CocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeadsRNS
 
Responsive logic - Kiwiparty
Responsive logic - KiwipartyResponsive logic - Kiwiparty
Responsive logic - KiwipartyJulien Cabanès
 

Similaire à Breizhjug spring batch 2011 (20)

Sug spring batch
Sug spring batchSug spring batch
Sug spring batch
 
Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010
 
20180628 skill value_masterclass_reactnative - v1.3
20180628 skill value_masterclass_reactnative - v1.320180628 skill value_masterclass_reactnative - v1.3
20180628 skill value_masterclass_reactnative - v1.3
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
SkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React NativeSkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React Native
 
REX react native
REX react nativeREX react native
REX react native
 
La mise en cache et ses secrets
La mise en cache et ses secretsLa mise en cache et ses secrets
La mise en cache et ses secrets
 
Améliorer l'implémentation du feature flipping
Améliorer l'implémentation du feature flippingAméliorer l'implémentation du feature flipping
Améliorer l'implémentation du feature flipping
 
7 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 2016
7 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 20167 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 2016
7 plugins de la communauté à ne pas manquer ! - Liferay France Symposium 2016
 
Optimiser réellement le référencement naturel de WordPress
Optimiser réellement le référencement naturel de WordPressOptimiser réellement le référencement naturel de WordPress
Optimiser réellement le référencement naturel de WordPress
 
GUSS - CRITEO Meetup Scale SQL for the Web
GUSS - CRITEO Meetup Scale SQL for the WebGUSS - CRITEO Meetup Scale SQL for the Web
GUSS - CRITEO Meetup Scale SQL for the Web
 
Supports de cours Fit4Digital future - CMS
Supports de cours Fit4Digital future - CMSSupports de cours Fit4Digital future - CMS
Supports de cours Fit4Digital future - CMS
 
jQuery mobile / PhoneGap : contenus dynamiques client-side
jQuery mobile / PhoneGap : contenus dynamiques client-sidejQuery mobile / PhoneGap : contenus dynamiques client-side
jQuery mobile / PhoneGap : contenus dynamiques client-side
 
What we've learnt from Ember.js - The family talk april 2015
What we've learnt from Ember.js - The family talk april 2015What we've learnt from Ember.js - The family talk april 2015
What we've learnt from Ember.js - The family talk april 2015
 
"What we've learnt from Ember.js developing our new product" by Guillaume Pot...
"What we've learnt from Ember.js developing our new product" by Guillaume Pot..."What we've learnt from Ember.js developing our new product" by Guillaume Pot...
"What we've learnt from Ember.js developing our new product" by Guillaume Pot...
 
Migrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds JavaMigrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds Java
 
CocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock Objects
 
Dev opsday case study
Dev opsday   case studyDev opsday   case study
Dev opsday case study
 
Gradle_BreizJUG
Gradle_BreizJUGGradle_BreizJUG
Gradle_BreizJUG
 
Responsive logic - Kiwiparty
Responsive logic - KiwipartyResponsive logic - Kiwiparty
Responsive logic - Kiwiparty
 

Breizhjug spring batch 2011

  • 1. Spring Batch Lundi 6 Juin 2011 Copyright © BreizhJug
  • 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
  • 12. Problèmes récurrents • Fiabilité Copyright © BreizhJug
  • 13. Problèmes récurrents • Maintenabilité Copyright © BreizhJug
  • 14. Problèmes récurrents • Réinvention de la roue… carrée Copyright © BreizhJug
  • 15. Quand j’écris une application web… Copyright © BreizhJug
  • 16. Quand j’accède à une base de données… 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
  • 20. Spring Batch Notions de base 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
  • 51. Lancer un job directement Copyright © BreizhJug
  • 52. Lancer un job via un scheduler On utilise ici SpringScheduler. Il est indépendant de Spring Batch Copyright © BreizhJug
  • 53. Lancer un job via un scheduler 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/
  • 61. Spring Batch Allons plus loin Copyright © BreizhJug
  • 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
  • 65. Maître détail Déclaration du Job 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
  • 75. Reprise sur erreur: Skip • Configuration de la gestion du « skip » 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
  • 81. Reprise sur erreur: Retry • Configuration de la gestion du « retry » 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
  • 85. Reprise sur erreur: Restart • Spring batch stocke des méta data 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
  • 88. Reprise sur erreur: Restart • ItemStream Copyright © BreizhJug
  • 89. Reprise sur erreur: Restart • Exemple de Reader « restartable » 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
  • 92. Gestion du flow Exemple Copyright © BreizhJug
  • 93. Gestion du flow Exemple 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
  • 102. Gestion du flow • Configuration Copyright © BreizhJug
  • 103. Gestion du flow • « exit status » + JobExecutionDecider Copyright © BreizhJug
  • 104. Gestion du flow • Configuration 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
  • 108. Gestion du flow • Accès à ExecutionContext Copyright © BreizhJug
  • 109. Gestion du flow • Configuration Copyright © BreizhJug
  • 110. Gestion du flow Step A • Mutualiser les flows Step B Mon Flow Step C Step D Copyright © BreizhJug
  • 111. Gestion du flow • Configuration Copyright © BreizhJug
  • 112. Gestion du flow • Réutiliser un Job 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