SlideShare uma empresa Scribd logo
1 de 187
Ch’ti JUG


Spring 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% de régie
• Digital
  – Mobile + HTML + RIA
  – JAVA + PHP + .NET
• 6 pôles de compétences, 25 clients, 50
  projets/an = 1 équipe
Duchess France
Duchess France - Présentation

Ce qu'est le JDuchess ...




                            Et ce qu'il n'est pas !
Duchess France - L'équipe


             @Audrey_Neveu


 @karesti                     @agnes_crepet



              @cfalguiere


  @Zazoun                     @dijouxellenne



             @MathildeLemee
Duchess France - Objectifs

   Avoir une visibilité des
    femmes dans l'IT ...

                              … Et les inciter à
                               participer aux
                               conférences
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 JUG


Spring Batch
  Mardi 29 Novembre 2011



    Olivier Bazoud
  Julien Jakubowski
Intervenants
Olivier 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 France


Julien Jakubowski, @jak78, OCTO Technology
   ISEN (le vrai, de Lille)
   Architecte technique
   Spécialisé Java EE / Spring
   Ch'ti JUG, Agile Tour Lille
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/
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
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 - vote
•   Questions / Réponses
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
• Intégration de flux financiers dans un SI
• …
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 données
   – Filtrer certaines recettes et créer un fichier de rejets
Problèmes récurrents
• Fiabilité
Problèmes récurrents
• Maintenabilité
Problèmes récurrents
• Réinvention de la roue… carrée
Quand j’écris une
application 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/3914729343/sizes/o/in/set-72157622354789320/
Et quand j’écris un batch ?

Spring Batch offre pourtant une solution pour vous guider
lors 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)
• Gestion des transactions
• Flow, reprise sur erreur
• Spring dans ses batchs

      Parallélisme          Spring Batch Admin
          Partitionnement
Spring Batch
Notions de base
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
Schéma du batch
                  InitialStep
                 InitialTasklet




                  RecipeStep

             Chunk oriented tasklet

ItemReader       ItemProcessor        ItemWriter
Tasklet
                  InitialStep
                 InitialTasklet




                  RecipeStep

             Chunk oriented tasklet

ItemReader       ItemProcessor        ItemWriter
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
Morceaux de code
ItemReader
                  InitialStep
                 InitialTasklet




                  RecipeStep

             Chunk oriented tasklet

ItemReader       ItemProcessor        ItemWriter
ItemReader
• Besoin
  – Lire le XML de recettes
• ItemReader
  – Fournit des items en entrée




           <xml>                  SELECT ... FROM ...

           123;AB;
           456;CD;
Morceaux de code
ItemProcessor
                   InitialStep
                  InitialTasklet




                   RecipeStep

              Chunk oriented tasklet

ItemReader        ItemProcessor        ItemWriter
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 »
Morceaux de code
Morceaux de code
ItemWriter
                  InitialStep
                 InitialTasklet




                  RecipeStep

             Chunk oriented tasklet

ItemReader       ItemProcessor        ItemWriter
ItemWriter
• Besoin
   – Décharge les bières dans une base SQL
• ItemWriter
   – Ecrit les items




             <xml>                  INSERT... INTO ...

             123;AB;
             456;CD;
Morceaux de code
Chunk
                  InitialStep
                 InitialTasklet




                  RecipeStep

             Chunk oriented tasklet

ItemReader       ItemProcessor        ItemWriter
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
Chunk
Traitement par lots
Morceaux de code
Listener
                  InitialStep
                 InitialTasklet




                  RecipeStep

             Chunk oriented tasklet

ItemReader       ItemProcessor        ItemWriter
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 tasklet

ItemReader       ItemProcessor        ItemWriter
Step

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




                  RecipeStep

             Chunk oriented tasklet

ItemReader       ItemProcessor        ItemWriter
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 scheduler

On utilise ici Spring Scheduler.
Il est indépendant de Spring Batch
Lancer un job
via un scheduler
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
Morceaux de code
Morceaux de code
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 Spring way, intégration à Spring
✔Productivité, à terme...
✗… après avoir payé le ticket d'entrée
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
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
Des questions,
    avant la suite ?




http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/
Spring Batch
Allons plus loin
Recipe
   Maître détail
                             Hop    Hop     Hop



R;Burton Ale;All Grain;Brad Smith
H;Goldings, East Kent;United Kingdom
H;Northern Brewer;Germany
H;Fuggles;United Kingdom
END
R;Dry Stout;All Grain;Brad Smith
H;Fuggles;United Kingdom
END
Un batch plus robuste
   reprise sur erreurs
Flow

  Step A




  Step B
Scaling et parallélisme




http://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 qui n’a pas un flow de
  bisounours…
• Scaling et parallélisme
• Spring Batch et Hibernate
• Spring Batch Admin
Maître détail

R;Burton Ale;All Grain;Brad Smith
H;Goldings, East Kent;United Kingdom
H;Northern Brewer;Germany
H;Fuggles;United Kingdom
END
R;Dry Stout;All Grain;Brad Smith
H;Fuggles;United Kingdom
END
Maître détail

                   RecipeStep

              Chunk oriented tasklet

ItemReader        ItemProcessor        ItemWriter
Maître détail
Déclaration du Job
Maître détail
Déclaration du reader custom
R;Burton Ale;All Grain;Brad Smith
H;Goldings, East Kent;United Kingdom
H;Northern Brewer;Germany
H;Fuggles;United Kingdom
END
R;Dry Stout;All Grain;Brad Smith
H;Fuggles;United Kingdom
END
Maître détail
Dé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 de ce que nous avons déjà
  codé précédemment
Un batch plus robuste
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
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)
Reprise sur erreur
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 »
Reprise sur erreur: Skip




– Si FlatFileException, Spring Batch skip l’item
– Skip de 10 items max
– Au-delà la step « failed »
– Include/Exclude possible
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
   – @OnSkipInRead
   – @OnSkipInWrite
   – @OnSkipInProcess
Reprise sur erreur: Retry
Reprise sur erreur: Retry




http://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 »
• Ecouter les cas de « retry »
Reprise sur erreur: Retry




– Si DLDAE, Spring Batch recommence
– Retry 3 fois max
– Au-delà la step « failed »
– Include/Exclude possible
Reprise sur erreur: Retry
• Personnaliser le « retry »: RetryPolicy
  – SimpleRetryPolicy (défaut)


• Stratégie entre 2 « retry »: BackoffPolicy
  – NoBackOffPolicy (défaut)
  – ExponentialBackOffPolicy vraiment utile
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 
• Nous pouvons redémarrer le batch
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ù reprend ?
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 à Spring Batch de savoir où
  reprendre
• C’est ce qui fait qu’un batch est
  « restartable »
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.
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 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
Gestion du flow
Gestion du flow
Le « batch bisounours »


                      Step A




                      Step B
Gestion du flow
Exemple
Gestion du flow
Exemple
Gestion du flow
• Le « batch complexe»
                         Step


          Step                  Step



          Step           Step   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 steps
Gestion du flow
• Exemple plus simple ;)
                              StepA

                     FAILED
         StepAlert


                                  *
                              StepB
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é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)
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
     StepC


                                     *
                                 StepB
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
  facilement la logique de branchement
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 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']}
Gestion du flow
• Accès à ExecutionContext
Gestion du flow
• Configuration
Gestion du flow
                         Step A
• Mutualiser les flows

                         Step B   Mon
                                  Flow


                         Step C




                         Step D
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 données entre steps
  – Mutualisé et réutilisé des jobs
Scaling




http://www.flickr.com/photos/claudiasofia99/2878579560/
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)
Spring Batch in Action




http://www.manning.com/templier
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/
Questions ?
Quizz
Quizz 1

Ce que n'est pas Spring Batch ?

1. un framework orienté batchs
2. un scheduler
3. un framework open source
Quizz 2

Qui est le principal leader du
 projet Spring Batch ?
1. Antonio Goncalves
2. Obi-wan Kenobi
3. Dave Syer
Quizz 3

Comment s'appelle le format
 standard de description de
 recette de bière ?
1. BeerXML
2. ISO-1664
3. ChtixML
Quizz 4

Qui vous offre un exemplaire de
 « Spring Batch in Action »?
1. Sais pas, je viens de me réveiller
2. Ekino
3. Chubaka
Quizz 5

Comment s'appelle la console
 d’admin de Spring Batch ?
1. Coldfusion Web Console
2. Spring Batch Admin
3. PlayScala
Quizz 6

Qui 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 Torvald
3. Ekino
ROTI




http://www.flickr.com/photos/34943981@N00/202923614/
Session « Spring Batch »
• Ekino
  – http://www.ekino.com / @3k1n0
  – Olivier Bazoud @obazoud


• Octo Technology
  – http://www.octo.com / @ OCTOTechnology
  – Julien Jakubowski @jak78
Spring Batch et Hibernate
Spring Batch et
             Hibernate
• Raison d’utiliser Hibernate avec Spring
  Batch: code existant  rapidité de
  développement

• Ca ne se fait pas sans dangers…
Spring Batch et
              Hibernate
• Overhead de Hibernate sur JDBC

• Hibernate est stateful (par défaut)
  – 1M d’items lus = 1M maintenus en RAM 
    OutOfMemoryError
Spring Batch et
              Hibernate
Correctifs possibles pour pb stateful:

• Ne pas faire d’Hibernate ;-)

• Utiliser HibernateCustomItemReader
  – Session stateless
• Ajuster le commit interval
Spring Batch et
              Hibernate
• OK je suis un bon élève, j’utilise
  HibernateCursorItemReader

• Maintenant, je fonce…

• Mais attention au select N+1
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
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
  –…
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
Spring Batch Admin




                • API REST
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
         …
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 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
Spring Batch Admin /
     Monitoring
Spring Batch Admin /
     Monitoring
Scaling




http://www.flickr.com/photos/claudiasofia99/2878579560/
Scaling
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)
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
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’
Scaling: Multi-threaded Step
Scaling: Step en parallèle
• Executer plusieurs Step en parallèle
• Mot clé « split » dans la configuration
• Possibilité utiliser un
  ThreadPoolTaskExecutor
Scaling: Step en parallèle
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
Scaling: Remote Chunking
                          Master
                           Chunk
                          Processor

                           Reader

                            Chunk
                           Provider




      Slave 1              Slave 2               Slave N
 Chunk      Writer    Chunk       Writer    Chunk      Writer
Processor            Processor             Processor
Scaling: Remote
               Chunking
• Démo ?!
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
Scaling: Partitioning

Mais conteúdo relacionado

Mais procurados

Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5Microsoft
 
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...Nicolas Silberman
 
Spring 3 en production
Spring 3 en productionSpring 3 en production
Spring 3 en productionJulien Dubois
 
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoiPerf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoipkernevez
 
La migration continue vers Symfony
La migration continue vers SymfonyLa migration continue vers Symfony
La migration continue vers SymfonyFrancois Zaninotto
 
Hibernate vs le Cloud computing
Hibernate vs le Cloud computingHibernate vs le Cloud computing
Hibernate vs le Cloud computingJulien Dubois
 
Un site web rapide ?
Un site web rapide ? Un site web rapide ?
Un site web rapide ? haricot
 
Perfug Guide de survie du développeur dans une application Java qui rame
Perfug Guide de survie du développeur dans une application Java qui ramePerfug Guide de survie du développeur dans une application Java qui rame
Perfug Guide de survie du développeur dans une application Java qui ramebleporini
 
Systèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionSystèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionLilia Sfaxi
 
Programmation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et ReactorProgrammation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et ReactorFlorian Beaufumé
 
Realtime Web avec Kafka, Spark et Mesos
Realtime Web avec Kafka, Spark et MesosRealtime Web avec Kafka, Spark et Mesos
Realtime Web avec Kafka, Spark et Mesosebiznext
 
Systèmes d'Exploitation - chp2-gestion des processus
Systèmes d'Exploitation - chp2-gestion des processusSystèmes d'Exploitation - chp2-gestion des processus
Systèmes d'Exploitation - chp2-gestion des processusLilia Sfaxi
 
Conférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.FrConférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.FrOxalide
 
Systèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoireSystèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoireLilia Sfaxi
 
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Normandy JUG
 
Presentation des outils traitements distribues
Presentation des outils traitements distribuesPresentation des outils traitements distribues
Presentation des outils traitements distribuesLê Anh
 

Mais procurados (19)

Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5
 
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
 
Spring 3 en production
Spring 3 en productionSpring 3 en production
Spring 3 en production
 
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoiPerf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
 
La migration continue vers Symfony
La migration continue vers SymfonyLa migration continue vers Symfony
La migration continue vers Symfony
 
Hibernate vs le Cloud computing
Hibernate vs le Cloud computingHibernate vs le Cloud computing
Hibernate vs le Cloud computing
 
Un site web rapide ?
Un site web rapide ? Un site web rapide ?
Un site web rapide ?
 
Perfug Guide de survie du développeur dans une application Java qui rame
Perfug Guide de survie du développeur dans une application Java qui ramePerfug Guide de survie du développeur dans une application Java qui rame
Perfug Guide de survie du développeur dans une application Java qui rame
 
Systèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionSystèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introduction
 
Programmation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et ReactorProgrammation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et Reactor
 
Realtime Web avec Kafka, Spark et Mesos
Realtime Web avec Kafka, Spark et MesosRealtime Web avec Kafka, Spark et Mesos
Realtime Web avec Kafka, Spark et Mesos
 
Systèmes d'Exploitation - chp2-gestion des processus
Systèmes d'Exploitation - chp2-gestion des processusSystèmes d'Exploitation - chp2-gestion des processus
Systèmes d'Exploitation - chp2-gestion des processus
 
Conférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.FrConférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.Fr
 
Systèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoireSystèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoire
 
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
 
Paris RailsCamp 2009
Paris RailsCamp 2009Paris RailsCamp 2009
Paris RailsCamp 2009
 
Presentation des outils traitements distribues
Presentation des outils traitements distribuesPresentation des outils traitements distribues
Presentation des outils traitements distribues
 
WebSocket avec Java EE 7
WebSocket avec Java EE 7WebSocket avec Java EE 7
WebSocket avec Java EE 7
 
Puppet slides
Puppet slidesPuppet slides
Puppet slides
 

Semelhante a Chtijug springbatch 2011

Paris JUG Spring Batch
Paris JUG Spring BatchParis JUG Spring Batch
Paris JUG Spring BatchOlivier BAZOUD
 
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
 
SkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React NativeSkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React NativeBenoit Fillon
 
Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring BatchAntoine Rey
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes AgilesIppon
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésMathieu Elie
 
Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?CGI Québec Formation
 
Ez18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshellEz18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshellgdigugli
 
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...CERTyou Formation
 
7 Suivre Les Developpements Et Recetter
7 Suivre Les Developpements Et Recetter7 Suivre Les Developpements Et Recetter
7 Suivre Les Developpements Et RecetterStéphane Bordage
 
Agile Data Warehousing - 7 pillars - Procima Experts
Agile Data Warehousing - 7 pillars - Procima ExpertsAgile Data Warehousing - 7 pillars - Procima Experts
Agile Data Warehousing - 7 pillars - Procima ExpertsMarc-Eric LaRocque
 
What’s Next Replay! Lyon 2011 - G. Darmont
What’s Next Replay! Lyon 2011 - G. DarmontWhat’s Next Replay! Lyon 2011 - G. Darmont
What’s Next Replay! Lyon 2011 - G. DarmontZenika
 
Pourquoi vous ne pouvez pas tester votre code
Pourquoi vous ne pouvez pas tester votre codePourquoi vous ne pouvez pas tester votre code
Pourquoi vous ne pouvez pas tester votre codeRémi Lesieur
 
20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven development20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven developmentLeClubQualiteLogicielle
 

Semelhante a Chtijug springbatch 2011 (20)

Paris JUG Spring Batch
Paris JUG Spring BatchParis JUG Spring Batch
Paris JUG 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
 
Sug spring batch
Sug spring batchSug spring batch
Sug spring batch
 
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
 
SkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React NativeSkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React Native
 
Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring Batch
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes Agiles
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautés
 
Usine Logicielle 2013
Usine Logicielle 2013Usine Logicielle 2013
Usine Logicielle 2013
 
Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?
 
Ez18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshellEz18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshell
 
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
 
Lunch learn 5 sep2013
Lunch learn 5 sep2013Lunch learn 5 sep2013
Lunch learn 5 sep2013
 
7 Suivre Les Developpements Et Recetter
7 Suivre Les Developpements Et Recetter7 Suivre Les Developpements Et Recetter
7 Suivre Les Developpements Et Recetter
 
Agile Data Warehousing - 7 pillars - Procima Experts
Agile Data Warehousing - 7 pillars - Procima ExpertsAgile Data Warehousing - 7 pillars - Procima Experts
Agile Data Warehousing - 7 pillars - Procima Experts
 
Spring Batch
Spring BatchSpring Batch
Spring Batch
 
Les nouveautés de PowerShell 3.0
Les nouveautés de PowerShell 3.0Les nouveautés de PowerShell 3.0
Les nouveautés de PowerShell 3.0
 
What’s Next Replay! Lyon 2011 - G. Darmont
What’s Next Replay! Lyon 2011 - G. DarmontWhat’s Next Replay! Lyon 2011 - G. Darmont
What’s Next Replay! Lyon 2011 - G. Darmont
 
Pourquoi vous ne pouvez pas tester votre code
Pourquoi vous ne pouvez pas tester votre codePourquoi vous ne pouvez pas tester votre code
Pourquoi vous ne pouvez pas tester votre code
 
20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven development20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven development
 

Chtijug springbatch 2011

  • 1. Ch’ti JUG Spring Batch Mardi 29 Novembre 2011 Olivier Bazoud Julien Jakubowski
  • 2. Le mot du sponsor de cette session
  • 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
  • 5. Duchess France - Présentation Ce qu'est le JDuchess ... Et ce qu'il n'est pas !
  • 6. Duchess France - L'équipe @Audrey_Neveu @karesti @agnes_crepet @cfalguiere @Zazoun @dijouxellenne @MathildeLemee
  • 7. Duchess France - Objectifs Avoir une visibilité des femmes dans l'IT ... … Et les inciter à participer aux conférences
  • 8. Duchess France - Les Actions
  • 9. Duchess France - En chiffre 70 membres 60 membres + de 700 followers
  • 10. Duchess France - Nous suivre http://jduchess.org/duchess-france/ duchessfr @duchessfr
  • 11. Merci de votre attention !
  • 13. Ch’ti JUG Spring Batch Mardi 29 Novembre 2011 Olivier Bazoud Julien Jakubowski
  • 14. Intervenants Olivier 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 France Julien Jakubowski, @jak78, OCTO Technology ISEN (le vrai, de Lille) Architecte technique Spécialisé Java EE / Spring Ch'ti JUG, Agile Tour Lille
  • 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. 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
  • 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 d'expérience • Forces et faiblesses • Notions avancées - vote • Questions / Réponses
  • 18. Batch : de quoi parle-t-on ? Batch processing = répétition de traitements sur un ensemble de données…
  • 19. Batch : de quoi parle-t-on ? … potentiellement grands volumes… http://www.flickr.com/photos/claudiasofia99/2878579560/
  • 20. Batch : de quoi parle-t-on ? … sans intervention d’un utilisateur humain – pas d’interface homme-machine
  • 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. Batch : de quoi parle-t-on ? Un batch n’est pas un scheduler • Cron, inotify, Quartz, $U… • Mais un scheduler peut le lancer
  • 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
  • 28. Quand j’accède à une base de données…
  • 29. Et quand j’écris un batch ? Je suis… à poil ? http://www.flickr.com/photos/crystaljingsr/3914729343/sizes/o/in/set-72157622354789320/
  • 30. Et quand j’écris un batch ? Spring Batch offre pourtant une solution pour vous guider lors de l’écriture de vos batchs en Java
  • 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
  • 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. Schéma du batch InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 35. Tasklet InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 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
  • 38. ItemReader InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 39. ItemReader • Besoin – Lire le XML de recettes • ItemReader – Fournit des items en entrée <xml> SELECT ... FROM ... 123;AB; 456;CD;
  • 41. ItemProcessor InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 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 »
  • 45. ItemWriter InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 46. ItemWriter • Besoin – Décharge les bières dans une base SQL • ItemWriter – Ecrit les items <xml> INSERT... INTO ... 123;AB; 456;CD;
  • 48. Chunk InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 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. Chunk
  • 53. Listener InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 54. Listener • Besoin – Création d’un fichier de rejet • Listener – Etre à l’écoute des évènements du batch
  • 58. Step InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 59. Step • Besoin – Etape dans le processus du batch – Contrôle le workflow
  • 60. Job InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 61. Job • Besoin – Décrire les étapes du batch – Composé d’un ou plusieurs steps Spring Tools Suite
  • 63. Lancer un job directement
  • 64. Lancer un job via un scheduler On utilise ici Spring Scheduler. Il est indépendant de Spring Batch
  • 65. Lancer un job via un scheduler
  • 66. 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
  • 69. 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 Spring way, intégration à Spring ✔Productivité, à terme... ✗… après avoir payé le ticket d'entrée
  • 70. 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
  • 71. 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
  • 72. Des questions, avant la suite ? http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/
  • 74. Recipe Maître détail Hop Hop Hop R;Burton Ale;All Grain;Brad Smith H;Goldings, East Kent;United Kingdom H;Northern Brewer;Germany H;Fuggles;United Kingdom END R;Dry Stout;All Grain;Brad Smith H;Fuggles;United Kingdom END
  • 75. Un batch plus robuste reprise sur erreurs
  • 76. Flow Step A Step B
  • 78. Spring Batch et Hibernate
  • 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. Maître détail R;Burton Ale;All Grain;Brad Smith H;Goldings, East Kent;United Kingdom H;Northern Brewer;Germany H;Fuggles;United Kingdom END R;Dry Stout;All Grain;Brad Smith H;Fuggles;United Kingdom END
  • 82. Maître détail RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 85. R;Burton Ale;All Grain;Brad Smith H;Goldings, East Kent;United Kingdom H;Northern Brewer;Germany H;Fuggles;United Kingdom END R;Dry Stout;All Grain;Brad Smith H;Fuggles;United Kingdom END
  • 86. Maître détail Déclaration du reader délégué
  • 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. Un batch plus robuste
  • 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. 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)
  • 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. 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. Reprise sur erreur: Skip • Personnaliser la gestion du « skip » • Par défaut: LimitCheckingItemSkipPolicy
  • 95. Reprise sur erreur: Skip • Configuration de la gestion du « skip »
  • 96. Reprise sur erreur: Skip • Un listener permet de traiter les items écartés • Les annotations existent aussi – @OnSkipInRead – @OnSkipInWrite – @OnSkipInProcess
  • 98. Reprise sur erreur: Retry http://www.libertaland.com/2011/04/une-femme-de-75-ans-coupe-tout-linternet-en-armenie/
  • 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. Reprise sur erreur: Retry – Si DLDAE, Spring Batch recommence – Retry 3 fois max – Au-delà la step « failed » – Include/Exclude possible
  • 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. Reprise sur erreur: Retry • Configuration de la gestion du « retry »
  • 103. Reprise sur erreur: Retry • Un listener permet de traiter les « retry »
  • 104. Reprise sur erreur: Retry • Pour les tasklets – RetryTemplate – RetryOperationsInterceptor avec de l’AOP
  • 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. Reprise sur erreur: Restart • Indique si le job est « restartable » • Indique le nombre max de « restart »
  • 108. Reprise sur erreur: Restart • La step est démarrée lors du restart même si elle a été terminée correctement
  • 109. Reprise sur erreur: Restart • Comment reprendre en plein milieu d’un chunk ? • Comment Spring Batch sait il où reprend ?
  • 110. Reprise sur erreur: Restart • Spring batch stocke des méta data
  • 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. 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. Reprise sur erreur: Restart • ItemStream
  • 114. Reprise sur erreur: Restart • Exemple de Reader « restartable »
  • 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
  • 117. Gestion du flow Le « batch bisounours » Step A Step B
  • 120. Gestion du flow • Le « batch complexe» Step Step Step Step Step Step Step Step Step
  • 121. Gestion du flow • Comment… – faire des flows non linéaires – piloter l’enchaînement des steps – passer des données entre steps
  • 122. Gestion du flow • Exemple plus simple ;) StepA FAILED StepAlert * StepB
  • 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. Gestion du flow • Créer et utiliser ses propres « exit status » – StepExecutionListener – JobDecider
  • 126. Gestion du flow • Utiliser ses propres « exit status » StepA COMPLETED WITH SKIPS StepC * StepB
  • 127. Gestion du flow • « exit status » + StepExecutionListener
  • 128. Gestion du flow • Configuration
  • 129. Gestion du flow • « exit status » + JobExecutionDecider
  • 130. Gestion du flow • Configuration
  • 131. Gestion du flow • « StepExecutionListener » ou « JobExecutionDecider » ? • JobExecutionDecider pour réutiliser plus facilement la logique de branchement
  • 132. Gestion du flow • Encore plus de contrôle: end, fail
  • 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. Gestion du flow • Accès à ExecutionContext
  • 135. Gestion du flow • Configuration
  • 136. Gestion du flow Step A • Mutualiser les flows Step B Mon Flow Step C Step D
  • 137. Gestion du flow • Configuration
  • 138. Gestion du flow • Réutiliser un Job
  • 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
  • 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. Spring Batch in Action http://www.manning.com/templier
  • 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/
  • 145. Quizz
  • 146. Quizz 1 Ce que n'est pas Spring Batch ? 1. un framework orienté batchs 2. un scheduler 3. un framework open source
  • 147. Quizz 2 Qui est le principal leader du projet Spring Batch ? 1. Antonio Goncalves 2. Obi-wan Kenobi 3. Dave Syer
  • 148. Quizz 3 Comment s'appelle le format standard de description de recette de bière ? 1. BeerXML 2. ISO-1664 3. ChtixML
  • 149. Quizz 4 Qui vous offre un exemplaire de « Spring Batch in Action »? 1. Sais pas, je viens de me réveiller 2. Ekino 3. Chubaka
  • 150. Quizz 5 Comment s'appelle la console d’admin de Spring Batch ? 1. Coldfusion Web Console 2. Spring Batch Admin 3. PlayScala
  • 151. Quizz 6 Qui 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 Torvald 3. Ekino
  • 153. Session « Spring Batch » • Ekino – http://www.ekino.com / @3k1n0 – Olivier Bazoud @obazoud • Octo Technology – http://www.octo.com / @ OCTOTechnology – Julien Jakubowski @jak78
  • 154.
  • 155. Spring Batch et Hibernate
  • 156. Spring Batch et Hibernate • Raison d’utiliser Hibernate avec Spring Batch: code existant  rapidité de développement • Ca ne se fait pas sans dangers…
  • 157. Spring Batch et Hibernate • Overhead de Hibernate sur JDBC • Hibernate est stateful (par défaut) – 1M d’items lus = 1M maintenus en RAM  OutOfMemoryError
  • 158. Spring Batch et Hibernate Correctifs possibles pour pb stateful: • Ne pas faire d’Hibernate ;-) • Utiliser HibernateCustomItemReader – Session stateless • Ajuster le commit interval
  • 159. Spring Batch et Hibernate • OK je suis un bon élève, j’utilise HibernateCursorItemReader • Maintenant, je fonce… • Mais attention au select N+1
  • 160. 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
  • 161. 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 –…
  • 162.
  • 163. 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
  • 164. Spring Batch Admin • API REST
  • 165. 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 …
  • 167. Spring Batch Admin • Lancement / Historique d’un job
  • 168. Spring Batch Admin • Lancer un job
  • 169. Spring Batch Admin • Détail d’un job execution
  • 170. Spring Batch Admin • Détail d’éxécution
  • 171. 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
  • 172. Spring Batch Admin / Monitoring
  • 173. Spring Batch Admin / Monitoring
  • 174.
  • 177. 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)
  • 178. 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
  • 179. 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’
  • 181. Scaling: Step en parallèle • Executer plusieurs Step en parallèle • Mot clé « split » dans la configuration • Possibilité utiliser un ThreadPoolTaskExecutor
  • 182. Scaling: Step en parallèle
  • 183. 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
  • 184. Scaling: Remote Chunking Master Chunk Processor Reader Chunk Provider Slave 1 Slave 2 Slave N Chunk Writer Chunk Writer Chunk Writer Processor Processor Processor
  • 185. Scaling: Remote Chunking • Démo ?!
  • 186. 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