Spring User Group France




  Spring Batch
     Mardi 27 Avril 2010

     Julien Jakubowski
       Olivier Bazoud

                           1
Intervenants
➢   Olivier Bazoud, FullSIX, 12 ans d'expérience
     ●   Architecte technique de sites web à fort traffic
     ●   Spécialisé Java EE/Spring
     ●   Spring Batch, Groovy, Grails
     ●   Spring User Group Paris
➢   Julien Jakubowski, OCTO Technology
     ●   Architecte, 9 ans d'expérience
     ●   Spécialisé Java EE / Spring
     ●   Productivité et qualité des développements
     ●   Ch'ti JUG

                                                            2
De quoi va-t-on parler ce soir ?
➢   On va parler de batchs en Java ...

                                                Spring Batch
➢   … et aussi de bière




        http://www.flickr.com/photos/fromeyetopixel/2559391584/
                                                                  3
Teaser
➢   Quand j'écris une application Web, il y a pléthore de
    frameworks Web




    JSF




                                                            4
Teaser
➢   Quand j'accède à une base de données, il y a moult
    solutions de persistance




                                                         5
Teaser
  ➢      Quand je fais du batch, je suis ... à poil !
  ➢      Les batchs seraient-ils les parents pauvres de Java ?




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


                                                                                          6
Teaser
➢   Spring Batch offre pourtant une solution pour vous
    guider lors de l'écriture de vos batchs



                          Spring Batch




                                                         7
Nos objectifs
➢   En sortant de la salle, vous :
     ●   Savez que Spring Batch existe
     ●   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
     ●   Pouvez faire un batch « Spring Batch » demain




                                                                   8
Batch : de quoi parle-t-on ?
➢    Batch processing = Traitement par lots




    http://www.flickr.com/photos/burnblue/308441464/




                                                       9
Batch : de quoi parle-t-on ?
            ➢       Opérations métiers sur de grands volumes




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

                                                               10
Batch : de quoi parle-t-on ?
➢   Pas d'interface graphique




                                     11
Batch : de quoi parle-t-on ?
➢   Exemples :
     ●   Import Flat/XML dans une base de données
     ●   Mise à jour de données de référentiels
     ●   Intégration de flux bancaire, financier dans un SI




                                                              12
Batch : de quoi parle-t-on ?
➢   Un batch n'est pas un scheduler
     ●   Cron, Quartz, $U...
     ●   Mais un scheduler peut le lancer




                                            13
Ce qui vous attend
➢       Spring Batch en 1 slide
➢       Un batch « à poil »
➢       Le même en Spring Batch
    •     Introduction des notions de Spring Batch, progres-
          sivement
➢       Retours d'expérience
➢       Forces et faiblesses
➢       Notions avancées




                                                               14
Spring Batch propose
✔ Un cadre
✔ Un vocabulaire (domain language)
✔ Traitement par lots (grands volumes de données)
✔ Gestion des transactions, commit régulier
✔ Spring dans ses batchs



Trace        Parallélisme     Une infrastructure pour les batchs
        Partitionnement     Reprise sur erreurs

                                                                   15
Beer batch
➢   Un batch “old school”
➢   Caractéristiques :
     ●   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




                                                                    16
Démo




       17
Problèmes récurrents
➢   Fiabilité




                                   18
Problèmes récurrents
➢   Maintenabilité




                                  19
Problèmes récurrents
➢   Réinvention de la roue




                                  20
Le nouveau batch
➢   Ecrire la date de début du batch
➢   Lire le fichier XML de recettes de bières
➢   Filtrer et créer un fichier de rejets
➢   Ecrire en base de données




                                                21
Schéma du batch
                 InitialStep

               InitialTasklet




                  RecipeStep


             Chunk Oriented Tasklet



ItemReader      ItemProcessor         ItemWriter




                                                   22
ItemReader
                   InitialStep

                 InitialTasklet




                    RecipeStep


               Chunk Oriented Tasklet



ItemReader        ItemProcessor         ItemWriter




                                                     23
ItemReader
➢   Besoin
     ●   Lire le XML des recettes
➢   ItemReader
     ●   Fournir des items en entrée




         <xml>             SELECT … FROM ...
         123;AB;
         456;CD;

                                               24
Morceaux de code




                   25
ItemProcessor
                 InitialStep

               InitialTasklet




                  RecipeStep


             Chunk Oriented Tasklet



ItemReader      ItemProcessor         ItemWriter




                                                   26
ItemProcessor
➢   Besoin
     ●   Transforme, valide ou/et filtre une recette
➢   ItemProcessor
     ●   Transforme un item et en retourne un autre
     ●   Emplacement pour les « règles métier »




                                                       27
Morceaux de code




                   28
Morceaux de code




                   29
ItemWriter
                   InitialStep

                 InitialTasklet




                    RecipeStep


               Chunk Oriented Tasklet



ItemReader        ItemProcessor         ItemWriter




                                                     30
Item Writer
➢   Besoin
     ●   Décharger les bières dans une base SQL
➢   ItemWriter
     ●   Ecrire les items




               <xml>            INSERT INTO...

               123;AB;
               456;CD;

                                                  31
Morceaux de code




                   32
Chunk
                 InitialStep

               InitialTasklet




                  RecipeStep


             Chunk Oriented Tasklet



ItemReader      ItemProcessor         ItemWriter




                                                   33
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




                                                                  34
Chunk




        35
Morceaux de code




                   36
Listener
                 InitialStep

               InitialTasklet




                  RecipeStep


             Chunk Oriented Tasklet



ItemReader      ItemProcessor         ItemWriter




                                                   37
Listener
➢   Besoin
     ●   Création du fichier de rejet
➢   Listener
     ●   Etre à l'écoute des événements du batch




                                                   38
Morceaux de code




                   39
Morceaux de code




                   40
Morceaux de code




                   41
Tasklet
                 InitialStep

               InitialTasklet




                  RecipeStep


             Chunk Oriented Tasklet



ItemReader      ItemProcessor         ItemWriter




                                                   42
Tasklet
➢   Besoin
     ●   Effectuer une tâche unitaire
➢   Exemples
     ●   Suppression de fichiers
     ●   Unzip d'un fichier
     ●   Appel d'une procédure stockée
     ●   Appel d'un web service




                                         43
Morceaux de code




                   44
Step
                 InitialStep

               InitialTasklet




                  RecipeStep


             Chunk Oriented Tasklet



ItemReader      ItemProcessor         ItemWriter




                                                   45
Step
➢   Besoin
     ●   Etape dans le processus du batch
     ●   Contrôle le workflow




                                            46
Job
                 InitialStep

               InitialTasklet




                  RecipeStep


             Chunk Oriented Tasklet



ItemReader      ItemProcessor         ItemWriter




                                                   47
Job
➢   Besoin
     ●   Décrire les étapes du batch
     ●   Composé d'une ou plusieurs steps




                                       Spring Tool Suite


                                                           48
Morceaux de code




                   49
Traitement par lots




                      50
Lancer un job




                51
Tests
➢   Tests unitaires de notre code custom
    ●   writers, processors etc...
➢   Tests d'intégration




                             Sonar




                                           52
Morceaux de code




                   53
Morceaux de code




                   54
Retours d'expérience FullSIX
➢   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




                                                           55
Retours d'expérience FullSIX
➢   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 50Mo + SQL; Gain : de 60 mn à 8mn
    ●   10 fichiers 4Mo + SQL; Gain : de 10mn à 1mn30s


                                                           56
Forces et faiblesses
✔ Fiabilité et bons patterns
✔ Tests, TDD
✔ 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




                                                   57
Notions avancées non-abordées
➢   Partionning, parallélisme, remoting
➢   Flow
➢   Reprise sur erreurs, Skipping
➢   Infrastructure pour les batchs
➢   Spring Batch Admin


    A vous de choisir pour une prochaine session...




                                                      58
Liens
➢   Spring User Group Paris
    ●   http://groups.google.fr/group/sugfr
➢   Spring Batch 2.1.1
    ●   http://static.springsource.org/spring-batch
➢   Le code de la présentation
    ●   http://code.google.com/p/fr-sug-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/



                                                                                    59
Questions ?




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




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



                                                       61

Sug spring batch

  • 1.
    Spring User GroupFrance Spring Batch Mardi 27 Avril 2010 Julien Jakubowski Olivier Bazoud 1
  • 2.
    Intervenants ➢ Olivier Bazoud, FullSIX, 12 ans d'expérience ● Architecte technique de sites web à fort traffic ● Spécialisé Java EE/Spring ● Spring Batch, Groovy, Grails ● Spring User Group Paris ➢ Julien Jakubowski, OCTO Technology ● Architecte, 9 ans d'expérience ● Spécialisé Java EE / Spring ● Productivité et qualité des développements ● Ch'ti JUG 2
  • 3.
    De quoi va-t-onparler ce soir ? ➢ On va parler de batchs en Java ... Spring Batch ➢ … et aussi de bière http://www.flickr.com/photos/fromeyetopixel/2559391584/ 3
  • 4.
    Teaser ➢ Quand j'écris une application Web, il y a pléthore de frameworks Web JSF 4
  • 5.
    Teaser ➢ Quand j'accède à une base de données, il y a moult solutions de persistance 5
  • 6.
    Teaser ➢ Quand je fais du batch, je suis ... à poil ! ➢ Les batchs seraient-ils les parents pauvres de Java ? http://www.flickr.com/photos/crystaljingsr/3914729343/sizes/o/in/set-72157622354789320/ 6
  • 7.
    Teaser ➢ Spring Batch offre pourtant une solution pour vous guider lors de l'écriture de vos batchs Spring Batch 7
  • 8.
    Nos objectifs ➢ En sortant de la salle, vous : ● Savez que Spring Batch existe ● 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 ● Pouvez faire un batch « Spring Batch » demain 8
  • 9.
    Batch : dequoi parle-t-on ? ➢ Batch processing = Traitement par lots http://www.flickr.com/photos/burnblue/308441464/ 9
  • 10.
    Batch : dequoi parle-t-on ? ➢ Opérations métiers sur de grands volumes http://www.flickr.com/photos/claudiasofia99/2878579560/ 10
  • 11.
    Batch : dequoi parle-t-on ? ➢ Pas d'interface graphique 11
  • 12.
    Batch : dequoi parle-t-on ? ➢ Exemples : ● Import Flat/XML dans une base de données ● Mise à jour de données de référentiels ● Intégration de flux bancaire, financier dans un SI 12
  • 13.
    Batch : dequoi parle-t-on ? ➢ Un batch n'est pas un scheduler ● Cron, Quartz, $U... ● Mais un scheduler peut le lancer 13
  • 14.
    Ce qui vousattend ➢ Spring Batch en 1 slide ➢ Un batch « à poil » ➢ Le même en Spring Batch • Introduction des notions de Spring Batch, progres- sivement ➢ Retours d'expérience ➢ Forces et faiblesses ➢ Notions avancées 14
  • 15.
    Spring Batch propose ✔Un cadre ✔ Un vocabulaire (domain language) ✔ Traitement par lots (grands volumes de données) ✔ Gestion des transactions, commit régulier ✔ Spring dans ses batchs Trace Parallélisme Une infrastructure pour les batchs Partitionnement Reprise sur erreurs 15
  • 16.
    Beer batch ➢ Un batch “old school” ➢ Caractéristiques : ● 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 16
  • 17.
  • 18.
  • 19.
    Problèmes récurrents ➢ Maintenabilité 19
  • 20.
    Problèmes récurrents ➢ Réinvention de la roue 20
  • 21.
    Le nouveau batch ➢ Ecrire la date de début du batch ➢ Lire le fichier XML de recettes de bières ➢ Filtrer et créer un fichier de rejets ➢ Ecrire en base de données 21
  • 22.
    Schéma du batch InitialStep InitialTasklet RecipeStep Chunk Oriented Tasklet ItemReader ItemProcessor ItemWriter 22
  • 23.
    ItemReader InitialStep InitialTasklet RecipeStep Chunk Oriented Tasklet ItemReader ItemProcessor ItemWriter 23
  • 24.
    ItemReader ➢ Besoin ● Lire le XML des recettes ➢ ItemReader ● Fournir des items en entrée <xml> SELECT … FROM ... 123;AB; 456;CD; 24
  • 25.
  • 26.
    ItemProcessor InitialStep InitialTasklet RecipeStep Chunk Oriented Tasklet ItemReader ItemProcessor ItemWriter 26
  • 27.
    ItemProcessor ➢ Besoin ● Transforme, valide ou/et filtre une recette ➢ ItemProcessor ● Transforme un item et en retourne un autre ● Emplacement pour les « règles métier » 27
  • 28.
  • 29.
  • 30.
    ItemWriter InitialStep InitialTasklet RecipeStep Chunk Oriented Tasklet ItemReader ItemProcessor ItemWriter 30
  • 31.
    Item Writer ➢ Besoin ● Décharger les bières dans une base SQL ➢ ItemWriter ● Ecrire les items <xml> INSERT INTO... 123;AB; 456;CD; 31
  • 32.
  • 33.
    Chunk InitialStep InitialTasklet RecipeStep Chunk Oriented Tasklet ItemReader ItemProcessor ItemWriter 33
  • 34.
    Chunk ➢ Besoin ● Lire, transformer et écrire ➢ Chunk ● Lire et transformer les données successivement ● Ecrire le lot de données ● Le commit-interval définit la taille du lot (différent de la taille du fichier) ● Gestion de la transaction : Commit/Rollback 34
  • 35.
  • 36.
  • 37.
    Listener InitialStep InitialTasklet RecipeStep Chunk Oriented Tasklet ItemReader ItemProcessor ItemWriter 37
  • 38.
    Listener ➢ Besoin ● Création du fichier de rejet ➢ Listener ● Etre à l'écoute des événements du batch 38
  • 39.
  • 40.
  • 41.
  • 42.
    Tasklet InitialStep InitialTasklet RecipeStep Chunk Oriented Tasklet ItemReader ItemProcessor ItemWriter 42
  • 43.
    Tasklet ➢ Besoin ● Effectuer une tâche unitaire ➢ Exemples ● Suppression de fichiers ● Unzip d'un fichier ● Appel d'une procédure stockée ● Appel d'un web service 43
  • 44.
  • 45.
    Step InitialStep InitialTasklet RecipeStep Chunk Oriented Tasklet ItemReader ItemProcessor ItemWriter 45
  • 46.
    Step ➢ Besoin ● Etape dans le processus du batch ● Contrôle le workflow 46
  • 47.
    Job InitialStep InitialTasklet RecipeStep Chunk Oriented Tasklet ItemReader ItemProcessor ItemWriter 47
  • 48.
    Job ➢ Besoin ● Décrire les étapes du batch ● Composé d'une ou plusieurs steps Spring Tool Suite 48
  • 49.
  • 50.
  • 51.
  • 52.
    Tests ➢ Tests unitaires de notre code custom ● writers, processors etc... ➢ Tests d'intégration Sonar 52
  • 53.
  • 54.
  • 55.
    Retours d'expérience FullSIX ➢ 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 55
  • 56.
    Retours d'expérience FullSIX ➢ 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 50Mo + SQL; Gain : de 60 mn à 8mn ● 10 fichiers 4Mo + SQL; Gain : de 10mn à 1mn30s 56
  • 57.
    Forces et faiblesses ✔Fiabilité et bons patterns ✔ Tests, TDD ✔ 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 57
  • 58.
    Notions avancées non-abordées ➢ Partionning, parallélisme, remoting ➢ Flow ➢ Reprise sur erreurs, Skipping ➢ Infrastructure pour les batchs ➢ Spring Batch Admin A vous de choisir pour une prochaine session... 58
  • 59.
    Liens ➢ Spring User Group Paris ● http://groups.google.fr/group/sugfr ➢ Spring Batch 2.1.1 ● http://static.springsource.org/spring-batch ➢ Le code de la présentation ● http://code.google.com/p/fr-sug-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/ 59
  • 60.
  • 61.