SlideShare une entreprise Scribd logo
1  sur  137
SUGF   Spring User Group France


 Spring Batch Avancé
             Mardi 20 Décembre 2011




             Olivier Bazoud
           Julien Jakubowski
SUGF
                        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
SUGF
        De quoi va-t-on parler ce soir ?
  • On va parler de batchs en Java




  • des techniques avancés


  • … et aussi (un peu) de bière



                               http://www.flickr.com/photos/fromeyetopixel/2559391584/
SUGF
                 Nos objectifs
  En sortant de la salle, vous savez:
   Identifier certains problèmes récurrents avec les
    batchs écrits en Java
   Si Spring Batch est utile pour vous (ou pas)
   Intégrer les notions principales
   Intégrer les notions avancées
   Faire un batch « Spring Batch » dès demain
SUGF
            Ce qui vous attend
  • Rappel de l’épisode précédent

  • Notions avancées – Vote

  • Questions / Réponses
SUGF




       Concepts de base
       Rappel de l’épisode précédent (?)
SUGF
        Batch : de quoi parle-t-on ?
  Batch processing = répétition de traitements sur
    un ensemble de données…
SUGF
       Batch : de quoi parle-t-on ?
  … potentiellement grands volumes…




       http://www.flickr.com/photos/claudiasofia99/2878579560/
SUGF
        Batch : de quoi parle-t-on ?
  … sans intervention d’un utilisateur humain – pas
   d’interface homme-machine
SUGF
       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
SUGF
       Batch : de quoi parle-t-on ?
  Un batch n’est pas un scheduler
  • Cron, inotify, Quartz, $U…
  • Mais un scheduler peut le lancer
SUGF
            Problèmes récurrents
  • Fiabilité
SUGF
          Problèmes récurrents
  • Maintenabilité
SUGF
          Problèmes récurrents
  • Réinvention de la roue… carrée
SUGF
       Quand j’écris un batch
                   Je suis… à poil, non ?




       http://www.flickr.com/photos/crystaljingsr/3914729343/sizes/o/in/set-72157622354789320/
SUGF
                        Solution

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




       Spring Batch
       Notions de base
SUGF        Exemple d’un batch
                         InitialStep
                        InitialTasklet




                         RecipeStep

                    Chunk oriented tasklet

       ItemReader       ItemProcessor        ItemWriter
SUGF                      Tasklet

  • Besoin
       – Effectuer une tâche unitaire
  • Exemples
       – Unzip d’un fichier
       – Appel d’une procédure stockée
       – Appel d’un web service
SUGF
                     ItemReader
  • Besoin
       – Lire le XML de recettes au format BeerXML
  • ItemReader
       – Fournit des items en entrée




                <xml>                    SELECT ... FROM ...

                123;AB;
                456;CD;
SUGF
                   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 »
SUGF
                         ItemWriter
  • Besoin
       – Décharge les bières dans une base SQL
  • ItemWriter
       – Ecrit les items




                 <xml>                  INSERT... INTO ...

                 123;AB;
                 456;CD;
SUGF
                                       Chunk


  • Besoin
       – Lire, transformer et écrire
  • Chunk
       1. Lire et transformer les données successivement
       2. Ecrire le lot de données

       – Le commit-interval définit la taille du lot
       – Gestion de la transaction : Commit/Rollback
SUGF
       Chunk
SUGF                         Job
  • Besoin
       – Décrire les étapes du batch
       – Composé d’un ou plusieurs Steps




                           Spring Tools Suite
SUGF        Exemple d’un batch
                         InitialStep
                        InitialTasklet




                         RecipeStep

                    Chunk oriented tasklet

       ItemReader       ItemProcessor        ItemWriter
SUGF
                           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
SUGF
           Forces et faiblesses
  ✔Fiabilité et bons patterns
  ✔Tests unitaires et d'intégration, TDD
  ✔...the Spring way, intégration à Spring
  ✔Batchs complexes mieux maintenables
  ✔Bénéficie de fonctions avancées à moindre coût
  ✔Productivité, à terme...
  ✗… après avoir payé le ticket d'entrée
Des questions,
SUGF
           avant la suite ?




       http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/
SUGF

       Spring Batch
       Allons plus loin
Recipe
SUGF
       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
SUGF   Un batch plus robuste
          reprise sur erreurs
SUGF
       Flow

         Step A




         Step B
SUGF
       Spring Batch Admin
SUGF
                   Scaling et parallélisme




       http://www.flickr.com/photos/claudiasofia99/2878579560/
SUGF
       Spring Batch et Hibernate
SUGF
                Allons plus loin…
  • Un cas un peu plus complexe
       – maître / détail
  •    La reprise sur erreurs
  •    Un flow qui n’est pas de bisounours…
  •    Spring Batch Admin (et Monitoring)
  •    Scaling et parallélisme
  •    Spring Batch et Hibernate
Recipe
SUGF
       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
   …
Maître détail
SUGF
       Déclaration du reader custom
SUGF

       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
SUGF
       Déclaration du reader délégué
SUGF                  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
  ou
  • Spring Batch pense à vous 
       – PatternMatchingCompositeLineTokenizer
SUGF
       Un batch plus robuste
SUGF
               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
SUGF
               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)
SUGF
       Reprise sur erreur
SUGF
       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 »
SUGF
           Reprise sur erreur: Skip




       – Si FlatFileException, Spring Batch skip l’item
       – Skip de 10 items max
       – Au-delà la step « failed »
       – Include/Exclude possible
SUGF
       Reprise sur erreur: Skip
  • Personnaliser la gestion du « skip »
  • Par défaut: LimitCheckingItemSkipPolicy
SUGF
        Reprise sur erreur: Skip
  • Configuration de la gestion du « skip »
SUGF
         Reprise sur erreur: Skip
  • Un listener permet de traiter les items
    écartés



  • Les annotations existent aussi
       – @OnSkipInRead
       – @OnSkipInWrite
       – @OnSkipInProcess
SUGF
       Reprise sur erreur: Retry
SUGF
       Reprise sur erreur: Retry
  • Permet de relancer une opération si
    indispo temporaire
  • Personnaliser les cas de « retry »
  • Ecouter les cas de « retry »
SUGF
       Reprise sur erreur: Retry




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


  • Stratégie entre 2 « retry »: BackoffPolicy
       – NoBackOffPolicy (défaut)
       – ExponentialBackOffPolicy vraiment utile
SUGF
       Reprise sur erreur: Retry
  • Configuration de la gestion du « retry »
SUGF
       Reprise sur erreur: Retry
  • Un listener permet de traiter les « retry »
SUGF
         Reprise sur erreur: Retry
  • Pour les tasklets
       – RetryTemplate
       – RetryOperationsInterceptor avec de l’AOP
SUGF
       Reprise sur erreur: Restart
SUGF       Reprise sur erreur:
                Restart
  • Même avec skip/retry, un batch peut
    planter
  • Il reste encore une solution 
  • Nous pouvons redémarrer le batch
SUGF        Reprise sur erreur:
                 Restart
  • Indique si le job est « restartable »



  • Indique le nombre max de « restart »
SUGF       Reprise sur erreur:
                Restart
  • La step est démarrée lors du restart même
    si elle a été terminée correctement
SUGF       Reprise sur erreur:
                Restart
  • Comment reprendre en plein milieu d’un
    chunk ?
  • Comment Spring Batch sait il où reprend ?
SUGF      Reprise sur erreur:
               Restart
  • Spring batch stocke des méta data
SUGF       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 »
SUGF       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.
SUGF      Reprise sur erreur:
               Restart
  • ItemStream
SUGF
       Reprise sur erreur: Restart
  • Exemple de Reader « restartable »
SUGF           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
SUGF
       Gestion du flow
SUGF
             Gestion du flow
  Le « batch bisounours »


                        Step A




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


            Step                  Step



            Step           Step   Step




            Step           Step   Step
SUGF
                 Gestion du flow
  • Comment…
       – faire des flows non linéaires
       – piloter l’enchaînement des steps
       – passer des données entre steps
SUGF
             Gestion du flow
  • Exemple plus simple ;)
                                StepA

                       FAILED
           StepAlert


                                    *
                                StepB
SUGF
       Gestion du flow
SUGF
                  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)
SUGF
                Gestion du flow
  • Créer et utiliser ses propres « exit status »
       – StepExecutionListener
       – JobDecider
SUGF
               Gestion du flow
  • Utiliser ses propres « exit status »
                                   StepA

            COMPLETED WITH SKIPS
       StepC


                                       *
                                   StepB
SUGF
             Gestion du flow
  • « exit status » + StepExecutionListener
SUGF
             Gestion du flow
  • Configuration
SUGF
             Gestion du flow
  • « exit status » + JobExecutionDecider
SUGF
             Gestion du flow
  • Configuration
SUGF
             Gestion du flow
  • « StepExecutionListener » ou
    « JobExecutionDecider » ?

  • JobExecutionDecider pour réutiliser plus
    facilement la logique de branchement
SUGF
              Gestion du flow
  • Encore plus de contrôle: end, fail
SUGF
                    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']}
SUGF
            Gestion du flow
  • Accès à ExecutionContext
SUGF
             Gestion du flow
  • Configuration
SUGF
             Gestion du flow
                           Step A
  • Mutualiser les flows

                           Step B   Mon
                                    Flow


                           Step C




                           Step D
SUGF
             Gestion du flow
  • Configuration
SUGF
             Gestion du flow
  • Réutiliser un Job
SUGF
                 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
SUGF
             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
SUGF
       Spring Batch Admin




                       • API REST
SUGF
                        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
           …
SUGF
          Spring Batch Admin
  • Les jobs
SUGF
          Spring Batch Admin
  • Lancement / Historique d’un job
SUGF
          Spring Batch Admin
  • Lancer un job
SUGF
          Spring Batch Admin
  • Détail d’un job execution
SUGF




       Spring Batch Admin
            • Détail d’éxécution
SUGF          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
SUGF   Spring Batch Admin /
            Monitoring
SUGF   Spring Batch Admin /
            Monitoring
SUGF
             Spring Batch Admin
  • Conclusion, nous avons aborder
       – Les principaux écrans de « Spring Batch
         Admin »
       – L’API Rest
       – Le monitoring par JMX
SUGF
                                                   Scaling




       http://www.flickr.com/photos/claudiasofia99/2878579560/
SUGF
       Scaling
SUGF
                        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)
SUGF
                       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
SUGF
       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’
SUGF
       Scaling: Multi-threaded Step
SUGF
       Scaling: Step en parallèle
  • Executer plusieurs Step en parallèle
  • Mot clé « split » dans la configuration
  • Possibilité utiliser un
    ThreadPoolTaskExecutor
SUGF
       Scaling: Step en parallèle
SUGF
        Scaling: Remote Chunking
  • Répartition de la charge vers des slaves
       – Lecture sur le Master
       – Processor et Writer sur les slaves
  • Spring Batch propose des
    interfaces/classes
  • Spring Integration propose une
    implementation
  • La relation master/slave : MOM
       – ActiveMQ, RabbitMQ, …
SUGF
         Scaling: Remote Chunking
                           Master
                            Chunk
                           Processor

                            Reader

                             Chunk
                            Provider




       Slave 1              Slave 2               Slave N
  Chunk      Writer    Chunk       Writer    Chunk      Writer
 Processor            Processor             Processor
SUGF          Scaling: Remote
                 Chunking
  • Démo ?!
SUGF
              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
SUGF
       Scaling: Partitioning
SUGF
                     Scaling
  • Conclusion, nous avons aborder
       – Les stratégies possibles
       – La démo « Remote Chunking of Step »
SUGF
       Spring Batch et Hibernate
SUGF             Spring Batch et
                   Hibernate
  • Les raisons
       – code existant
       – rapidité de développement (les premiers 80%)


  • Ca ne se fait pas sans dangers…
SUGF              Spring Batch et
                    Hibernate
  • Votre mapping Hibernate est il fait pour
    du batch ?
       – Ai-je besoin de tous les fetchs ?!
       – Select N+1 ?!
  • Overhead de Hibernate sur JDBC
SUGF             Spring Batch et
                   Hibernate
  • Hibernate est stateful (par défaut)
       – 1M d’items lus = 1M en RAM  OutOfMemoryError


  • Utiliser HibernateCursorItemReader
       – 1 requête HQL
       – Session stateless
SUGF
         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
SUGF
         Spring Batch et Hibernate
  • Principe
       – L’ItemReader lit les « id » 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
       –…
SUGF
                       Questions ?




       http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/
SUGF
       Quizz
SUGF   Spring Batch in Action




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

  Ce que n'est pas Spring Batch ?

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

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

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

  Quel est l’objet qui n’existe pas
   en « Spring Batch » ?
  1. ItemReader
  2. ItemWriter
  3. ItemBien
SUGF
                Quizz 5

  Qui vous offre un exemplaire de
   « Spring Batch in Action »?
  1. Sais pas, je viens de me réveiller
  2. Ekino
  3. Le père Noël
SUGF
                                           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/
SUGF                             ROTI




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


  • Octo Technology
       – http://www.octo.com / @ OCTOTechnology
       – Julien Jakubowski / @jak78

Contenu connexe

Tendances

Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...MICHRAFY MUSTAFA
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
 
HTTP2 and gRPC
HTTP2 and gRPCHTTP2 and gRPC
HTTP2 and gRPCGuo Jing
 
Introduction to Java 11
Introduction to Java 11 Introduction to Java 11
Introduction to Java 11 Knoldus Inc.
 
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Jean-Michel Doudoux
 
Threading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines
Threading Made Easy! A Busy Developer’s Guide to Kotlin CoroutinesThreading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines
Threading Made Easy! A Busy Developer’s Guide to Kotlin CoroutinesLauren Yew
 
Spring batch introduction
Spring batch introductionSpring batch introduction
Spring batch introductionAlex Fernandez
 
Apache Flink Stream Processing
Apache Flink Stream ProcessingApache Flink Stream Processing
Apache Flink Stream ProcessingSuneel Marthi
 
Spring Boot+Kafka: the New Enterprise Platform
Spring Boot+Kafka: the New Enterprise PlatformSpring Boot+Kafka: the New Enterprise Platform
Spring Boot+Kafka: the New Enterprise PlatformVMware Tanzu
 
Distributed Caching in Kubernetes with Hazelcast
Distributed Caching in Kubernetes with HazelcastDistributed Caching in Kubernetes with Hazelcast
Distributed Caching in Kubernetes with HazelcastMesut Celik
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 

Tendances (20)

Spring Boot
Spring BootSpring Boot
Spring Boot
 
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
What's new in Java 11
What's new in Java 11What's new in Java 11
What's new in Java 11
 
Kafka 101
Kafka 101Kafka 101
Kafka 101
 
HTTP2 and gRPC
HTTP2 and gRPCHTTP2 and gRPC
HTTP2 and gRPC
 
Introduction to Java 11
Introduction to Java 11 Introduction to Java 11
Introduction to Java 11
 
Spring Boot Tutorial
Spring Boot TutorialSpring Boot Tutorial
Spring Boot Tutorial
 
Workshop React.js
Workshop React.jsWorkshop React.js
Workshop React.js
 
Nouveautés Java 9-10-11
Nouveautés Java 9-10-11Nouveautés Java 9-10-11
Nouveautés Java 9-10-11
 
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
 
Threading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines
Threading Made Easy! A Busy Developer’s Guide to Kotlin CoroutinesThreading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines
Threading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines
 
Spring boot
Spring bootSpring boot
Spring boot
 
Spring batch introduction
Spring batch introductionSpring batch introduction
Spring batch introduction
 
Apache Flink Stream Processing
Apache Flink Stream ProcessingApache Flink Stream Processing
Apache Flink Stream Processing
 
Spring Boot+Kafka: the New Enterprise Platform
Spring Boot+Kafka: the New Enterprise PlatformSpring Boot+Kafka: the New Enterprise Platform
Spring Boot+Kafka: the New Enterprise Platform
 
Spring Batch
Spring BatchSpring Batch
Spring Batch
 
Support de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec SpringSupport de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec Spring
 
Distributed Caching in Kubernetes with Hazelcast
Distributed Caching in Kubernetes with HazelcastDistributed Caching in Kubernetes with Hazelcast
Distributed Caching in Kubernetes with Hazelcast
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 

En vedette

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
 
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
 
Spring Batch Performance Tuning
Spring Batch Performance TuningSpring Batch Performance Tuning
Spring Batch Performance TuningGunnar Hillert
 
10 Amazing Things To Do With a Hadoop-Based Data Lake
10 Amazing Things To Do With a Hadoop-Based Data Lake10 Amazing Things To Do With a Hadoop-Based Data Lake
10 Amazing Things To Do With a Hadoop-Based Data LakeVMware Tanzu
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationAntoine Rey
 

En vedette (7)

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
 
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.
 
Spring Batch
Spring BatchSpring Batch
Spring Batch
 
Spring Batch Performance Tuning
Spring Batch Performance TuningSpring Batch Performance Tuning
Spring Batch Performance Tuning
 
Spring Batch Introduction
Spring Batch IntroductionSpring Batch Introduction
Spring Batch Introduction
 
10 Amazing Things To Do With a Hadoop-Based Data Lake
10 Amazing Things To Do With a Hadoop-Based Data Lake10 Amazing Things To Do With a Hadoop-Based Data Lake
10 Amazing Things To Do With a Hadoop-Based Data Lake
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring Integration
 

Similaire à Spring Batch Avance

Paris JUG Spring Batch
Paris JUG Spring BatchParis JUG Spring Batch
Paris JUG Spring BatchOlivier BAZOUD
 
Chtijug springbatch 2011
Chtijug springbatch 2011Chtijug springbatch 2011
Chtijug springbatch 2011Olivier 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
 
WS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - XebiaWS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - XebiaOlivier BAZOUD
 
Tests de performances d'une application Java EE
Tests de performances d'une application Java EETests de performances d'une application Java EE
Tests de performances d'une application Java EEAntonio Gomes Rodrigues
 
Spring 3 en production
Spring 3 en productionSpring 3 en production
Spring 3 en productionJulien Dubois
 
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
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes AgilesIppon
 
Présentation JSS2015 - Le Query Store de SQL Server 2016
Présentation JSS2015 - Le Query Store de SQL Server 2016Présentation JSS2015 - Le Query Store de SQL Server 2016
Présentation JSS2015 - Le Query Store de SQL Server 2016Guillaume Nocent
 
[JSS2015] Query Store
[JSS2015] Query Store[JSS2015] Query Store
[JSS2015] Query StoreGUSS
 
Integration continue - Introduction
Integration continue - IntroductionIntegration continue - Introduction
Integration continue - IntroductionOlivier ETIENNE
 
Tests Dinterface SWT
Tests Dinterface SWTTests Dinterface SWT
Tests Dinterface SWTEric Le Merdy
 
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
 
GPars et PrettyTime - Paris JUG 2011 - Guillaume Laforge
GPars et PrettyTime - Paris JUG 2011 - Guillaume LaforgeGPars et PrettyTime - Paris JUG 2011 - Guillaume Laforge
GPars et PrettyTime - Paris JUG 2011 - Guillaume LaforgeGuillaume Laforge
 
Game of upgrades to liferay dxp - ep1: Migration de données
Game of upgrades to liferay dxp - ep1: Migration de donnéesGame of upgrades to liferay dxp - ep1: Migration de données
Game of upgrades to liferay dxp - ep1: Migration de donnéesQuang Tu LE
 
Kanban pour maîtriser le développement incrémental
Kanban pour maîtriser le développement incrémentalKanban pour maîtriser le développement incrémental
Kanban pour maîtriser le développement incrémentalFabrice Aimetti
 

Similaire à Spring Batch Avance (20)

Spring Batch ParisJUG
Spring Batch ParisJUG Spring Batch ParisJUG
Spring Batch ParisJUG
 
Paris JUG Spring Batch
Paris JUG Spring BatchParis JUG Spring Batch
Paris JUG Spring Batch
 
Chtijug springbatch 2011
Chtijug springbatch 2011Chtijug springbatch 2011
Chtijug springbatch 2011
 
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
 
ParisJUG Spring Boot
ParisJUG Spring BootParisJUG Spring Boot
ParisJUG Spring Boot
 
WS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - XebiaWS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - Xebia
 
Tests de performances d'une application Java EE
Tests de performances d'une application Java EETests de performances d'une application Java EE
Tests de performances d'une application Java EE
 
Spring 3 en production
Spring 3 en productionSpring 3 en production
Spring 3 en production
 
Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes Agiles
 
Présentation JSS2015 - Le Query Store de SQL Server 2016
Présentation JSS2015 - Le Query Store de SQL Server 2016Présentation JSS2015 - Le Query Store de SQL Server 2016
Présentation JSS2015 - Le Query Store de SQL Server 2016
 
[JSS2015] Query Store
[JSS2015] Query Store[JSS2015] Query Store
[JSS2015] Query Store
 
Integration continue - Introduction
Integration continue - IntroductionIntegration continue - Introduction
Integration continue - Introduction
 
Tests Dinterface SWT
Tests Dinterface SWTTests Dinterface SWT
Tests Dinterface SWT
 
ex6_solution.pdf
ex6_solution.pdfex6_solution.pdf
ex6_solution.pdf
 
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
 
GPars et PrettyTime - Paris JUG 2011 - Guillaume Laforge
GPars et PrettyTime - Paris JUG 2011 - Guillaume LaforgeGPars et PrettyTime - Paris JUG 2011 - Guillaume Laforge
GPars et PrettyTime - Paris JUG 2011 - Guillaume Laforge
 
Game of upgrades to liferay dxp - ep1: Migration de données
Game of upgrades to liferay dxp - ep1: Migration de donnéesGame of upgrades to liferay dxp - ep1: Migration de données
Game of upgrades to liferay dxp - ep1: Migration de données
 
Kanban pour maîtriser le développement incrémental
Kanban pour maîtriser le développement incrémentalKanban pour maîtriser le développement incrémental
Kanban pour maîtriser le développement incrémental
 

Spring Batch Avance

  • 1. SUGF Spring User Group France Spring Batch Avancé Mardi 20 Décembre 2011 Olivier Bazoud Julien Jakubowski
  • 2. SUGF 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
  • 3. SUGF De quoi va-t-on parler ce soir ? • On va parler de batchs en Java • des techniques avancés • … et aussi (un peu) de bière http://www.flickr.com/photos/fromeyetopixel/2559391584/
  • 4. SUGF Nos objectifs En sortant de la salle, vous savez:  Identifier certains problèmes récurrents avec les batchs écrits en Java  Si Spring Batch est utile pour vous (ou pas)  Intégrer les notions principales  Intégrer les notions avancées  Faire un batch « Spring Batch » dès demain
  • 5. SUGF Ce qui vous attend • Rappel de l’épisode précédent • Notions avancées – Vote • Questions / Réponses
  • 6. SUGF Concepts de base Rappel de l’épisode précédent (?)
  • 7. SUGF Batch : de quoi parle-t-on ? Batch processing = répétition de traitements sur un ensemble de données…
  • 8. SUGF Batch : de quoi parle-t-on ? … potentiellement grands volumes… http://www.flickr.com/photos/claudiasofia99/2878579560/
  • 9. SUGF Batch : de quoi parle-t-on ? … sans intervention d’un utilisateur humain – pas d’interface homme-machine
  • 10. SUGF 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
  • 11. SUGF Batch : de quoi parle-t-on ? Un batch n’est pas un scheduler • Cron, inotify, Quartz, $U… • Mais un scheduler peut le lancer
  • 12. SUGF Problèmes récurrents • Fiabilité
  • 13. SUGF Problèmes récurrents • Maintenabilité
  • 14. SUGF Problèmes récurrents • Réinvention de la roue… carrée
  • 15. SUGF Quand j’écris un batch Je suis… à poil, non ? http://www.flickr.com/photos/crystaljingsr/3914729343/sizes/o/in/set-72157622354789320/
  • 16. SUGF Solution Spring Batch offre pourtant une solution pour vous guider lors de l’écriture de vos batchs en Java
  • 17. SUGF Spring Batch Notions de base
  • 18. SUGF Exemple d’un batch InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 19. SUGF Tasklet • Besoin – Effectuer une tâche unitaire • Exemples – Unzip d’un fichier – Appel d’une procédure stockée – Appel d’un web service
  • 20. SUGF ItemReader • Besoin – Lire le XML de recettes au format BeerXML • ItemReader – Fournit des items en entrée <xml> SELECT ... FROM ... 123;AB; 456;CD;
  • 21. SUGF 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 »
  • 22. SUGF ItemWriter • Besoin – Décharge les bières dans une base SQL • ItemWriter – Ecrit les items <xml> INSERT... INTO ... 123;AB; 456;CD;
  • 23. SUGF Chunk • Besoin – Lire, transformer et écrire • Chunk 1. Lire et transformer les données successivement 2. Ecrire le lot de données – Le commit-interval définit la taille du lot – Gestion de la transaction : Commit/Rollback
  • 24. SUGF Chunk
  • 25. SUGF Job • Besoin – Décrire les étapes du batch – Composé d’un ou plusieurs Steps Spring Tools Suite
  • 26. SUGF Exemple d’un batch InitialStep InitialTasklet RecipeStep Chunk oriented tasklet ItemReader ItemProcessor ItemWriter
  • 27. SUGF 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
  • 28. SUGF Forces et faiblesses ✔Fiabilité et bons patterns ✔Tests unitaires et d'intégration, TDD ✔...the Spring way, intégration à Spring ✔Batchs complexes mieux maintenables ✔Bénéficie de fonctions avancées à moindre coût ✔Productivité, à terme... ✗… après avoir payé le ticket d'entrée
  • 29. Des questions, SUGF avant la suite ? http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/
  • 30. SUGF Spring Batch Allons plus loin
  • 31. Recipe SUGF 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
  • 32. SUGF Un batch plus robuste reprise sur erreurs
  • 33. SUGF Flow Step A Step B
  • 34. SUGF Spring Batch Admin
  • 35. SUGF Scaling et parallélisme http://www.flickr.com/photos/claudiasofia99/2878579560/
  • 36. SUGF Spring Batch et Hibernate
  • 37. SUGF Allons plus loin… • Un cas un peu plus complexe – maître / détail • La reprise sur erreurs • Un flow qui n’est pas de bisounours… • Spring Batch Admin (et Monitoring) • Scaling et parallélisme • Spring Batch et Hibernate
  • 38. Recipe SUGF 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 …
  • 39. Maître détail SUGF Déclaration du reader custom
  • 40. SUGF 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
  • 41. Maître détail SUGF Déclaration du reader délégué
  • 42. SUGF 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 ou • Spring Batch pense à vous  – PatternMatchingCompositeLineTokenizer
  • 43. SUGF Un batch plus robuste
  • 44. SUGF 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
  • 45. SUGF 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)
  • 46. SUGF Reprise sur erreur
  • 47. SUGF 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 »
  • 48. SUGF Reprise sur erreur: Skip – Si FlatFileException, Spring Batch skip l’item – Skip de 10 items max – Au-delà la step « failed » – Include/Exclude possible
  • 49. SUGF Reprise sur erreur: Skip • Personnaliser la gestion du « skip » • Par défaut: LimitCheckingItemSkipPolicy
  • 50. SUGF Reprise sur erreur: Skip • Configuration de la gestion du « skip »
  • 51. SUGF Reprise sur erreur: Skip • Un listener permet de traiter les items écartés • Les annotations existent aussi – @OnSkipInRead – @OnSkipInWrite – @OnSkipInProcess
  • 52. SUGF Reprise sur erreur: Retry
  • 53. SUGF Reprise sur erreur: Retry • Permet de relancer une opération si indispo temporaire • Personnaliser les cas de « retry » • Ecouter les cas de « retry »
  • 54. SUGF Reprise sur erreur: Retry – Si DLDAE, Spring Batch recommence – Retry 3 fois max – Au-delà la step « failed » – Includes/Excludes possible
  • 55. SUGF Reprise sur erreur: Retry • Personnaliser le « retry »: RetryPolicy – SimpleRetryPolicy (défaut) • Stratégie entre 2 « retry »: BackoffPolicy – NoBackOffPolicy (défaut) – ExponentialBackOffPolicy vraiment utile
  • 56. SUGF Reprise sur erreur: Retry • Configuration de la gestion du « retry »
  • 57. SUGF Reprise sur erreur: Retry • Un listener permet de traiter les « retry »
  • 58. SUGF Reprise sur erreur: Retry • Pour les tasklets – RetryTemplate – RetryOperationsInterceptor avec de l’AOP
  • 59. SUGF Reprise sur erreur: Restart
  • 60. SUGF Reprise sur erreur: Restart • Même avec skip/retry, un batch peut planter • Il reste encore une solution  • Nous pouvons redémarrer le batch
  • 61. SUGF Reprise sur erreur: Restart • Indique si le job est « restartable » • Indique le nombre max de « restart »
  • 62. SUGF Reprise sur erreur: Restart • La step est démarrée lors du restart même si elle a été terminée correctement
  • 63. SUGF Reprise sur erreur: Restart • Comment reprendre en plein milieu d’un chunk ? • Comment Spring Batch sait il où reprend ?
  • 64. SUGF Reprise sur erreur: Restart • Spring batch stocke des méta data
  • 65. SUGF 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 »
  • 66. SUGF 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.
  • 67. SUGF Reprise sur erreur: Restart • ItemStream
  • 68. SUGF Reprise sur erreur: Restart • Exemple de Reader « restartable »
  • 69. SUGF 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
  • 70. SUGF Gestion du flow
  • 71. SUGF Gestion du flow Le « batch bisounours » Step A Step B
  • 72. SUGF Gestion du flow Exemple
  • 73. SUGF Gestion du flow Exemple
  • 74. SUGF Gestion du flow • Le « batch complexe» Step Step Step Step Step Step Step Step Step
  • 75. SUGF Gestion du flow • Comment… – faire des flows non linéaires – piloter l’enchaînement des steps – passer des données entre steps
  • 76. SUGF Gestion du flow • Exemple plus simple ;) StepA FAILED StepAlert * StepB
  • 77. SUGF Gestion du flow
  • 78. SUGF 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)
  • 79. SUGF Gestion du flow • Créer et utiliser ses propres « exit status » – StepExecutionListener – JobDecider
  • 80. SUGF Gestion du flow • Utiliser ses propres « exit status » StepA COMPLETED WITH SKIPS StepC * StepB
  • 81. SUGF Gestion du flow • « exit status » + StepExecutionListener
  • 82. SUGF Gestion du flow • Configuration
  • 83. SUGF Gestion du flow • « exit status » + JobExecutionDecider
  • 84. SUGF Gestion du flow • Configuration
  • 85. SUGF Gestion du flow • « StepExecutionListener » ou « JobExecutionDecider » ? • JobExecutionDecider pour réutiliser plus facilement la logique de branchement
  • 86. SUGF Gestion du flow • Encore plus de contrôle: end, fail
  • 87. SUGF 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']}
  • 88. SUGF Gestion du flow • Accès à ExecutionContext
  • 89. SUGF Gestion du flow • Configuration
  • 90. SUGF Gestion du flow Step A • Mutualiser les flows Step B Mon Flow Step C Step D
  • 91. SUGF Gestion du flow • Configuration
  • 92. SUGF Gestion du flow • Réutiliser un Job
  • 93. SUGF 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
  • 94. SUGF 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
  • 95. SUGF Spring Batch Admin • API REST
  • 96. SUGF 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 …
  • 97. SUGF Spring Batch Admin • Les jobs
  • 98. SUGF Spring Batch Admin • Lancement / Historique d’un job
  • 99. SUGF Spring Batch Admin • Lancer un job
  • 100. SUGF Spring Batch Admin • Détail d’un job execution
  • 101. SUGF Spring Batch Admin • Détail d’éxécution
  • 102. SUGF 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
  • 103. SUGF Spring Batch Admin / Monitoring
  • 104. SUGF Spring Batch Admin / Monitoring
  • 105. SUGF Spring Batch Admin • Conclusion, nous avons aborder – Les principaux écrans de « Spring Batch Admin » – L’API Rest – Le monitoring par JMX
  • 106. SUGF Scaling http://www.flickr.com/photos/claudiasofia99/2878579560/
  • 107. SUGF Scaling
  • 108. SUGF 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)
  • 109. SUGF 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
  • 110. SUGF 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’
  • 111. SUGF Scaling: Multi-threaded Step
  • 112. SUGF Scaling: Step en parallèle • Executer plusieurs Step en parallèle • Mot clé « split » dans la configuration • Possibilité utiliser un ThreadPoolTaskExecutor
  • 113. SUGF Scaling: Step en parallèle
  • 114. SUGF Scaling: Remote Chunking • Répartition de la charge vers des slaves – Lecture sur le Master – Processor et Writer sur les slaves • Spring Batch propose des interfaces/classes • Spring Integration propose une implementation • La relation master/slave : MOM – ActiveMQ, RabbitMQ, …
  • 115. SUGF Scaling: Remote Chunking Master Chunk Processor Reader Chunk Provider Slave 1 Slave 2 Slave N Chunk Writer Chunk Writer Chunk Writer Processor Processor Processor
  • 116. SUGF Scaling: Remote Chunking • Démo ?!
  • 117. SUGF 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
  • 118. SUGF Scaling: Partitioning
  • 119. SUGF Scaling • Conclusion, nous avons aborder – Les stratégies possibles – La démo « Remote Chunking of Step »
  • 120. SUGF Spring Batch et Hibernate
  • 121. SUGF Spring Batch et Hibernate • Les raisons – code existant – rapidité de développement (les premiers 80%) • Ca ne se fait pas sans dangers…
  • 122. SUGF Spring Batch et Hibernate • Votre mapping Hibernate est il fait pour du batch ? – Ai-je besoin de tous les fetchs ?! – Select N+1 ?! • Overhead de Hibernate sur JDBC
  • 123. SUGF Spring Batch et Hibernate • Hibernate est stateful (par défaut) – 1M d’items lus = 1M en RAM  OutOfMemoryError • Utiliser HibernateCursorItemReader – 1 requête HQL – Session stateless
  • 124. SUGF 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
  • 125. SUGF Spring Batch et Hibernate • Principe – L’ItemReader lit les « id » 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 –…
  • 126. SUGF Questions ? http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/
  • 127. SUGF Quizz
  • 128. SUGF Spring Batch in Action http://www.manning.com/templier
  • 129. SUGF 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
  • 130. SUGF Quizz 1 Ce que n'est pas Spring Batch ? 1. un framework orienté batchs 2. un scheduler 3. un framework open source
  • 131. SUGF Quizz 2 Qui est le principal leader du projet Spring Batch ? 1. Antonio Goncalves 2. Obi-wan Kenobi 3. Dave Syer
  • 132. SUGF Quizz 3 Comment s'appelle la console d’admin de Spring Batch ? 1. Coldfusion Web Console 2. Spring Batch Admin 3. PlayScalaInCloud
  • 133. SUGF Quizz 4 Quel est l’objet qui n’existe pas en « Spring Batch » ? 1. ItemReader 2. ItemWriter 3. ItemBien
  • 134. SUGF Quizz 5 Qui vous offre un exemplaire de « Spring Batch in Action »? 1. Sais pas, je viens de me réveiller 2. Ekino 3. Le père Noël
  • 135. SUGF 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/
  • 136. SUGF ROTI http://www.flickr.com/photos/34943981@N00/202923614/
  • 137. SUGF Session « Spring Batch Avancé» • Ekino – http://www.ekino.com / @3k1n0 – Olivier Bazoud / @obazoud • Octo Technology – http://www.octo.com / @ OCTOTechnology – Julien Jakubowski / @jak78