SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Spring Batch
 ou le Batch avec la classe !


                           Jean-Philippe Briend
                      jean-philippe.briend@infin-it.fr
                                 twitter.com/jpbriend
Papa, c’est quoi un Batch ?

    Wikipedia : http://en.wikipedia.org/wiki/Batch_processing
•   Batch jobs are set up so they can be run to completion without manual intervention, so
    all input data is preselected through scripts or command-line parameters. This is in
    contrast to "online" or interactive programs which prompt the user for such input. A
    program takes a set of data files as input, processes the data, and
    produces a set of output data files. This operating environment is termed as
    "batch processing" because the input data are collected into batches of files and are
    processed in batches by the program.
Les batchs en Java : Aujourd’hui

•   C’est vieux !

•   C’est moche !

•   C’est multi-techno !

•   C’est mal écrit !


                    On aime pas ça !
Les batchs en Java : Demain

•   Organiser !

•   Unifier !

•   Simplifier !

•   Se concentrer sur le métier !


                  On aime ça !
Spring, pourquoi c’est sympa ?


•   La tuyauterie par configuration XML

•   On commence à être à l’aise dessus (sinon
    changez d’employeur !)
I had a dream ...
•   Imaginez qu’un Batch soit des petites cases bien
    agencées ...

•   Imaginez qu’on puisse agencer ces cases par de
    la configuration XML ...

•   Imaginez qu’on puisse facilement configurer son
    Batch ...
Here comes the Sun ...



 Spring Batch
Spring Batch n’est pas ...
•   un ordonnanceur : non non non non, Spring
    Batch ne planifie pas de batchs !

•   une nouvelle techno : on ne remplace pas du PL/
    SQL s’il ne le faut pas. On reste pragmatique !

•   un truc brainless !
Spring Batch ...
•   va vous obliger à vous décrasser les neurones

•   va vous faire passer pour un mec carré qui fait des
    choses performantes (selon la capacité intellectuelle de
    chacun, hein !)

•   va vous faire réutiliser (on n’y croyait plus)

•   va vous faire aller voir les MOAs (oui oui oui)

•   va vous faire dessiner (et ouais !)
Compose ton framework ...
    Composons notre framework à la carte :

•   petites boites pour représenter des traitements métiers
    différents

•   agencer ces traitements via un diagramme d’activité

•   Springifier le tout
Step
•   Définition : “A Step is a domain object that encapsulates
    an independent, sequential phase of a batch job”

•   Se compose de :
                                   ItemReader


              Step               ItemProcessor

                                   ItemWriter
Job


•   Définition : “A Job is an entity that encapsulates an entire
    batch process.”

•   Se compose d’un ensemble de Steps agencées en un
    diagramme d’activité
Step : Tasklet
•   Step la plus simple : Interface avec une seule méthode
    execute

•   Appelée de façon répétitive jusqu’à ce qu’elle renvoit
    RepeatStatus.FINISHED ou une Exception

•   Transaction unique

                      <step id="step1">
                          <tasklet ref="myTasklet"/>
                      </step>
Step : Chunk




<job id="sampleJob" job-repository="jobRepository">
    <step id="step1">
        <tasklet transaction-manager="transactionManager">
            <chunk reader="itemReader" writer="itemWriter" commit-interval="10"/>
        <tasklet>
    </step>
</job>
Flow


       Split
Résumé
Job : ensemble cohérent de traitements de données
   Un Job est composé de Steps
Step : traitement unitaire de données
   Une Step est composée de :
        un Reader
        un ou plusieurs Processors
        un Writer
ItemReader
•   Rôle : lire des données quelquepart

    •   Fichier

    •   XML

    •   Base de Données

•   Retourne un Item ou null s’il n’y en a plus

•   Plein de Readers existant
            public interface ItemReader<T> {
                T read() throws Exception, UnexpectedInputException, ParseException;
            }
ItemWriter
•   Identique à l’ItemReader mais avec l’opération inverse

    •   Fichier

    •   XML

    •   Base de Données

•   Plein de Writers existant

            public interface ItemWriter<T> {
                void write(List<? extends T> items) throws Exception;
            }
ItemProcessor
•   Très simple : prends un objet en entrée et en retourne
    un autre en sortie

•   Sert à implémenter la logique métier

•   Chainable

        public interface ItemProcessor<I, O> {
            O process(I item) throws Exception;
        }
MultiThreading


•   Multi-threaded Step

•   Parallel Steps

•   Remote Chunking

•   Partitioning Step
Multi-threaded Step
•   Utilisation des TaskExecutors de Spring




           <step id="loading">
               <tasklet task-executor="taskExecutor">...</tasklet>
           </step>
Parallel Steps
•   Utilisation des TaskExecutors de Spring

•   Utilisation du flow Split

         <job id="job1">
             <split id="split1" task-executor="taskExecutor" next="step4">
                 <flow>
                      <step id="step1" next="step2" />
                      <step id="step2" />
                 </flow>
                 <flow>
                      <step id="step3" />
                 </flow>
             </split>
             <step id="step4" />
         </job>

         <beans:bean id="taskExecutor"
         class="org.spr...SimpleAsyncTaskExecutor"/>
Remote Chunking
Partitioning Step
Demo

Weitere ähnliche Inhalte

Was ist angesagt?

Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016Antoine Rey
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JSAbdoulaye Dieng
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Eric SIBER
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationAntoine Rey
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsHugo Hamon
 
Introduction à Angular JS
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JSAntoine Rey
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework springAntoine Rey
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partageraliagadir
 
Tech Days Spring Intégration
Tech Days Spring IntégrationTech Days Spring Intégration
Tech Days Spring IntégrationArrow-Institute
 
Introduction à Angularjs
Introduction à AngularjsIntroduction à Angularjs
Introduction à AngularjsRossi Oddet
 
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursHoracio Gonzalez
 

Was ist angesagt? (20)

Maven
MavenMaven
Maven
 
Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016
 
Spring Batch - concepts de base
Spring Batch - concepts de baseSpring Batch - concepts de base
Spring Batch - concepts de base
 
ParisJUG Spring Boot
ParisJUG Spring BootParisJUG Spring Boot
ParisJUG Spring Boot
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Présentation1
Présentation1Présentation1
Présentation1
 
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring Integration
 
Tp java ee.pptx
Tp java ee.pptxTp java ee.pptx
Tp java ee.pptx
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec Jenkins
 
Introduction à Angular JS
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JS
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework spring
 
Les Servlets et JSP
Les Servlets et JSPLes Servlets et JSP
Les Servlets et JSP
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partager
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
Tech Days Spring Intégration
Tech Days Spring IntégrationTech Days Spring Intégration
Tech Days Spring Intégration
 
Spring Batch
Spring BatchSpring Batch
Spring Batch
 
Introduction à Angularjs
Introduction à AngularjsIntroduction à Angularjs
Introduction à Angularjs
 
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
 

Andere mochten auch

Persistance polyglotte avec Spring Data
Persistance polyglotte avec Spring DataPersistance polyglotte avec Spring Data
Persistance polyglotte avec Spring DataMichel Domenjoud
 
Backday Xebia : Découvrez Spring Boot sur un cas pratique
Backday Xebia : Découvrez Spring Boot sur un cas pratiqueBackday Xebia : Découvrez Spring Boot sur un cas pratique
Backday Xebia : Découvrez Spring Boot sur un cas pratiquePublicis Sapient Engineering
 
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
 
Faîtes vivre vos cliches
Faîtes vivre vos clichesFaîtes vivre vos cliches
Faîtes vivre vos clicheslasoi
 
Présentation réunion publique Agenda21
Présentation réunion publique Agenda21Présentation réunion publique Agenda21
Présentation réunion publique Agenda21villedebegles
 
Tome 6 : Tourisme et culture
Tome 6 : Tourisme et cultureTome 6 : Tourisme et culture
Tome 6 : Tourisme et cultureparoles d'élus
 
W. Neubauer - E-Lib.ch im europäischen Kontext
W. Neubauer - E-Lib.ch im europäischen KontextW. Neubauer - E-Lib.ch im europäischen Kontext
W. Neubauer - E-Lib.ch im europäischen Kontextinfoclio.ch
 
Qu'enseigne réellement la bible
Qu'enseigne réellement la bibleQu'enseigne réellement la bible
Qu'enseigne réellement la bibleJoseph-eugene
 
DNX Talk ★ Conni Biesalski - Die unverbluemte Story einer Digitalen Nomadin
DNX Talk ★ Conni Biesalski - Die unverbluemte Story einer Digitalen NomadinDNX Talk ★ Conni Biesalski - Die unverbluemte Story einer Digitalen Nomadin
DNX Talk ★ Conni Biesalski - Die unverbluemte Story einer Digitalen NomadinDNX
 
Travailler avec enfants_autistes
Travailler avec enfants_autistesTravailler avec enfants_autistes
Travailler avec enfants_autistesMarta Montoro
 
Restructuration du département de la pédiatrie de Gustave Roussy : Visite de ...
Restructuration du département de la pédiatrie de Gustave Roussy : Visite de ...Restructuration du département de la pédiatrie de Gustave Roussy : Visite de ...
Restructuration du département de la pédiatrie de Gustave Roussy : Visite de ...Gustave Roussy
 
Yunohost language
Yunohost language  Yunohost language
Yunohost language mermouy
 

Andere mochten auch (20)

Persistance polyglotte avec Spring Data
Persistance polyglotte avec Spring DataPersistance polyglotte avec Spring Data
Persistance polyglotte avec Spring Data
 
Backday Xebia : Découvrez Spring Boot sur un cas pratique
Backday Xebia : Découvrez Spring Boot sur un cas pratiqueBackday Xebia : Découvrez Spring Boot sur un cas pratique
Backday Xebia : Découvrez Spring Boot sur un cas pratique
 
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
 
Faîtes vivre vos cliches
Faîtes vivre vos clichesFaîtes vivre vos cliches
Faîtes vivre vos cliches
 
Joomla Entwicklung
Joomla EntwicklungJoomla Entwicklung
Joomla Entwicklung
 
Présentation réunion publique Agenda21
Présentation réunion publique Agenda21Présentation réunion publique Agenda21
Présentation réunion publique Agenda21
 
Tome 6 : Tourisme et culture
Tome 6 : Tourisme et cultureTome 6 : Tourisme et culture
Tome 6 : Tourisme et culture
 
W. Neubauer - E-Lib.ch im europäischen Kontext
W. Neubauer - E-Lib.ch im europäischen KontextW. Neubauer - E-Lib.ch im europäischen Kontext
W. Neubauer - E-Lib.ch im europäischen Kontext
 
Xhprof
XhprofXhprof
Xhprof
 
Qu'enseigne réellement la bible
Qu'enseigne réellement la bibleQu'enseigne réellement la bible
Qu'enseigne réellement la bible
 
#Impulse4 travel thesen
#Impulse4 travel thesen#Impulse4 travel thesen
#Impulse4 travel thesen
 
Andrea g
Andrea gAndrea g
Andrea g
 
DNX Talk ★ Conni Biesalski - Die unverbluemte Story einer Digitalen Nomadin
DNX Talk ★ Conni Biesalski - Die unverbluemte Story einer Digitalen NomadinDNX Talk ★ Conni Biesalski - Die unverbluemte Story einer Digitalen Nomadin
DNX Talk ★ Conni Biesalski - Die unverbluemte Story einer Digitalen Nomadin
 
Travailler avec enfants_autistes
Travailler avec enfants_autistesTravailler avec enfants_autistes
Travailler avec enfants_autistes
 
Datenbanken
DatenbankenDatenbanken
Datenbanken
 
Test 1
Test 1Test 1
Test 1
 
Restructuration du département de la pédiatrie de Gustave Roussy : Visite de ...
Restructuration du département de la pédiatrie de Gustave Roussy : Visite de ...Restructuration du département de la pédiatrie de Gustave Roussy : Visite de ...
Restructuration du département de la pédiatrie de Gustave Roussy : Visite de ...
 
DOC170316-17032016154812
DOC170316-17032016154812DOC170316-17032016154812
DOC170316-17032016154812
 
Yunohost language
Yunohost language  Yunohost language
Yunohost language
 
Le présent
Le présentLe présent
Le présent
 

Ähnlich wie Spring Batch 17-05-2011

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
 
WS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - XebiaWS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - XebiaOlivier BAZOUD
 
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
 
react-slides.ppx (2) (1).pptx react presentation basic
react-slides.ppx (2) (1).pptx react presentation basicreact-slides.ppx (2) (1).pptx react presentation basic
react-slides.ppx (2) (1).pptx react presentation basiczineblahib2
 
Synchroniser ses applis simplement avec akeneo/batch
Synchroniser ses applis simplement avec akeneo/batchSynchroniser ses applis simplement avec akeneo/batch
Synchroniser ses applis simplement avec akeneo/batchgplanchat
 
Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010JUG Lausanne
 
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)hibnico
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScripttarkan_
 
Formation JavaScript - Guide de démarrage rapide
Formation JavaScript - Guide de démarrage rapideFormation JavaScript - Guide de démarrage rapide
Formation JavaScript - Guide de démarrage rapideTarek Jellali
 
SkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React NativeSkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React NativeBenoit Fillon
 

Ähnlich wie Spring Batch 17-05-2011 (20)

Paris JUG Spring Batch
Paris JUG Spring BatchParis JUG Spring Batch
Paris JUG Spring Batch
 
Spring Batch
Spring BatchSpring Batch
Spring Batch
 
Chtijug springbatch 2011
Chtijug springbatch 2011Chtijug springbatch 2011
Chtijug springbatch 2011
 
WS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - XebiaWS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - Xebia
 
Paris RailsCamp 2009
Paris RailsCamp 2009Paris RailsCamp 2009
Paris RailsCamp 2009
 
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
 
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...
 
react-slides.ppx (2) (1).pptx react presentation basic
react-slides.ppx (2) (1).pptx react presentation basicreact-slides.ppx (2) (1).pptx react presentation basic
react-slides.ppx (2) (1).pptx react presentation basic
 
Design Pattern JEE
Design Pattern JEEDesign Pattern JEE
Design Pattern JEE
 
Synchroniser ses applis simplement avec akeneo/batch
Synchroniser ses applis simplement avec akeneo/batchSynchroniser ses applis simplement avec akeneo/batch
Synchroniser ses applis simplement avec akeneo/batch
 
GetText / Rails - FR
GetText / Rails - FRGetText / Rails - FR
GetText / Rails - FR
 
GetText / Rails
GetText / RailsGetText / Rails
GetText / Rails
 
Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010
 
JavaSwing.pdf
JavaSwing.pdfJavaSwing.pdf
JavaSwing.pdf
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Cours_Java.pdf
Cours_Java.pdfCours_Java.pdf
Cours_Java.pdf
 
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScript
 
Formation JavaScript - Guide de démarrage rapide
Formation JavaScript - Guide de démarrage rapideFormation JavaScript - Guide de démarrage rapide
Formation JavaScript - Guide de démarrage rapide
 
SkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React NativeSkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React Native
 

Mehr von Normandy JUG

Découvrez les bases de l’ergonomie web : donnez à vos utilisateurs le meilleu...
Découvrez les bases de l’ergonomie web : donnez à vos utilisateurs le meilleu...Découvrez les bases de l’ergonomie web : donnez à vos utilisateurs le meilleu...
Découvrez les bases de l’ergonomie web : donnez à vos utilisateurs le meilleu...Normandy JUG
 
Codeurs En Seine - Lean startup - Matthieu Garde-Lebreton
Codeurs En Seine - Lean startup - Matthieu Garde-LebretonCodeurs En Seine - Lean startup - Matthieu Garde-Lebreton
Codeurs En Seine - Lean startup - Matthieu Garde-LebretonNormandy JUG
 
What makes groovy groovy codeurs en seine - 2013 - light size
What makes groovy groovy   codeurs en seine - 2013 - light sizeWhat makes groovy groovy   codeurs en seine - 2013 - light size
What makes groovy groovy codeurs en seine - 2013 - light sizeNormandy JUG
 
[Codeurs en seine] management & monitoring cloud
[Codeurs en seine] management & monitoring cloud[Codeurs en seine] management & monitoring cloud
[Codeurs en seine] management & monitoring cloudNormandy JUG
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Normandy JUG
 
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
 
Gatling : Faites tomber la foudre sur votre serveur ! (Stéphane Landelle)
Gatling : Faites tomber la foudre sur votre serveur ! (Stéphane Landelle)Gatling : Faites tomber la foudre sur votre serveur ! (Stéphane Landelle)
Gatling : Faites tomber la foudre sur votre serveur ! (Stéphane Landelle)Normandy JUG
 
Soirée Ceylon avec Stéphane Epardaud
Soirée Ceylon avec Stéphane EpardaudSoirée Ceylon avec Stéphane Epardaud
Soirée Ceylon avec Stéphane EpardaudNormandy JUG
 
Soirée Guava et Lombok avec Thierry Leriche
Soirée Guava et Lombok avec Thierry LericheSoirée Guava et Lombok avec Thierry Leriche
Soirée Guava et Lombok avec Thierry LericheNormandy JUG
 
Couche Base par Tugdual Grall
Couche Base par Tugdual GrallCouche Base par Tugdual Grall
Couche Base par Tugdual GrallNormandy JUG
 
Apache, osgi and karaf par Guillaume Nodet
Apache, osgi and karaf par Guillaume NodetApache, osgi and karaf par Guillaume Nodet
Apache, osgi and karaf par Guillaume NodetNormandy JUG
 
Mockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilMockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilNormandy JUG
 
Annotations Java par Olivier Croisier
Annotations Java par Olivier CroisierAnnotations Java par Olivier Croisier
Annotations Java par Olivier CroisierNormandy JUG
 
ATR2011 - Planning poker
ATR2011 - Planning pokerATR2011 - Planning poker
ATR2011 - Planning pokerNormandy JUG
 
ATR2011 - Scrum dans les tranchées Normandes
ATR2011 - Scrum dans les tranchées NormandesATR2011 - Scrum dans les tranchées Normandes
ATR2011 - Scrum dans les tranchées NormandesNormandy JUG
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computingNormandy JUG
 
Soirée BPM - Introduction Logica
Soirée BPM - Introduction LogicaSoirée BPM - Introduction Logica
Soirée BPM - Introduction LogicaNormandy JUG
 

Mehr von Normandy JUG (20)

Découvrez les bases de l’ergonomie web : donnez à vos utilisateurs le meilleu...
Découvrez les bases de l’ergonomie web : donnez à vos utilisateurs le meilleu...Découvrez les bases de l’ergonomie web : donnez à vos utilisateurs le meilleu...
Découvrez les bases de l’ergonomie web : donnez à vos utilisateurs le meilleu...
 
Codeurs En Seine - Lean startup - Matthieu Garde-Lebreton
Codeurs En Seine - Lean startup - Matthieu Garde-LebretonCodeurs En Seine - Lean startup - Matthieu Garde-Lebreton
Codeurs En Seine - Lean startup - Matthieu Garde-Lebreton
 
What makes groovy groovy codeurs en seine - 2013 - light size
What makes groovy groovy   codeurs en seine - 2013 - light sizeWhat makes groovy groovy   codeurs en seine - 2013 - light size
What makes groovy groovy codeurs en seine - 2013 - light size
 
[Codeurs en seine] management & monitoring cloud
[Codeurs en seine] management & monitoring cloud[Codeurs en seine] management & monitoring cloud
[Codeurs en seine] management & monitoring cloud
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
 
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...
 
Gatling : Faites tomber la foudre sur votre serveur ! (Stéphane Landelle)
Gatling : Faites tomber la foudre sur votre serveur ! (Stéphane Landelle)Gatling : Faites tomber la foudre sur votre serveur ! (Stéphane Landelle)
Gatling : Faites tomber la foudre sur votre serveur ! (Stéphane Landelle)
 
Soirée Ceylon avec Stéphane Epardaud
Soirée Ceylon avec Stéphane EpardaudSoirée Ceylon avec Stéphane Epardaud
Soirée Ceylon avec Stéphane Epardaud
 
Soirée Guava et Lombok avec Thierry Leriche
Soirée Guava et Lombok avec Thierry LericheSoirée Guava et Lombok avec Thierry Leriche
Soirée Guava et Lombok avec Thierry Leriche
 
Couche Base par Tugdual Grall
Couche Base par Tugdual GrallCouche Base par Tugdual Grall
Couche Base par Tugdual Grall
 
Java7 normandyjug
Java7 normandyjugJava7 normandyjug
Java7 normandyjug
 
Apache, osgi and karaf par Guillaume Nodet
Apache, osgi and karaf par Guillaume NodetApache, osgi and karaf par Guillaume Nodet
Apache, osgi and karaf par Guillaume Nodet
 
Mockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilMockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice Duteil
 
Annotations Java par Olivier Croisier
Annotations Java par Olivier CroisierAnnotations Java par Olivier Croisier
Annotations Java par Olivier Croisier
 
ATR2011 - Planning poker
ATR2011 - Planning pokerATR2011 - Planning poker
ATR2011 - Planning poker
 
ATR2011 - Scrum dans les tranchées Normandes
ATR2011 - Scrum dans les tranchées NormandesATR2011 - Scrum dans les tranchées Normandes
ATR2011 - Scrum dans les tranchées Normandes
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computing
 
HTML5 en projet
HTML5 en projetHTML5 en projet
HTML5 en projet
 
Git
GitGit
Git
 
Soirée BPM - Introduction Logica
Soirée BPM - Introduction LogicaSoirée BPM - Introduction Logica
Soirée BPM - Introduction Logica
 

Spring Batch 17-05-2011

  • 1. Spring Batch ou le Batch avec la classe ! Jean-Philippe Briend jean-philippe.briend@infin-it.fr twitter.com/jpbriend
  • 2. Papa, c’est quoi un Batch ? Wikipedia : http://en.wikipedia.org/wiki/Batch_processing • Batch jobs are set up so they can be run to completion without manual intervention, so all input data is preselected through scripts or command-line parameters. This is in contrast to "online" or interactive programs which prompt the user for such input. A program takes a set of data files as input, processes the data, and produces a set of output data files. This operating environment is termed as "batch processing" because the input data are collected into batches of files and are processed in batches by the program.
  • 3. Les batchs en Java : Aujourd’hui • C’est vieux ! • C’est moche ! • C’est multi-techno ! • C’est mal écrit ! On aime pas ça !
  • 4. Les batchs en Java : Demain • Organiser ! • Unifier ! • Simplifier ! • Se concentrer sur le métier ! On aime ça !
  • 5. Spring, pourquoi c’est sympa ? • La tuyauterie par configuration XML • On commence à être à l’aise dessus (sinon changez d’employeur !)
  • 6. I had a dream ... • Imaginez qu’un Batch soit des petites cases bien agencées ... • Imaginez qu’on puisse agencer ces cases par de la configuration XML ... • Imaginez qu’on puisse facilement configurer son Batch ...
  • 7. Here comes the Sun ... Spring Batch
  • 8. Spring Batch n’est pas ... • un ordonnanceur : non non non non, Spring Batch ne planifie pas de batchs ! • une nouvelle techno : on ne remplace pas du PL/ SQL s’il ne le faut pas. On reste pragmatique ! • un truc brainless !
  • 9. Spring Batch ... • va vous obliger à vous décrasser les neurones • va vous faire passer pour un mec carré qui fait des choses performantes (selon la capacité intellectuelle de chacun, hein !) • va vous faire réutiliser (on n’y croyait plus) • va vous faire aller voir les MOAs (oui oui oui) • va vous faire dessiner (et ouais !)
  • 10. Compose ton framework ... Composons notre framework à la carte : • petites boites pour représenter des traitements métiers différents • agencer ces traitements via un diagramme d’activité • Springifier le tout
  • 11. Step • Définition : “A Step is a domain object that encapsulates an independent, sequential phase of a batch job” • Se compose de : ItemReader Step ItemProcessor ItemWriter
  • 12. Job • Définition : “A Job is an entity that encapsulates an entire batch process.” • Se compose d’un ensemble de Steps agencées en un diagramme d’activité
  • 13.
  • 14. Step : Tasklet • Step la plus simple : Interface avec une seule méthode execute • Appelée de façon répétitive jusqu’à ce qu’elle renvoit RepeatStatus.FINISHED ou une Exception • Transaction unique <step id="step1"> <tasklet ref="myTasklet"/> </step>
  • 15. Step : Chunk <job id="sampleJob" job-repository="jobRepository"> <step id="step1"> <tasklet transaction-manager="transactionManager"> <chunk reader="itemReader" writer="itemWriter" commit-interval="10"/> <tasklet> </step> </job>
  • 16. Flow Split
  • 17. Résumé Job : ensemble cohérent de traitements de données Un Job est composé de Steps Step : traitement unitaire de données Une Step est composée de : un Reader un ou plusieurs Processors un Writer
  • 18. ItemReader • Rôle : lire des données quelquepart • Fichier • XML • Base de Données • Retourne un Item ou null s’il n’y en a plus • Plein de Readers existant public interface ItemReader<T> { T read() throws Exception, UnexpectedInputException, ParseException; }
  • 19. ItemWriter • Identique à l’ItemReader mais avec l’opération inverse • Fichier • XML • Base de Données • Plein de Writers existant public interface ItemWriter<T> { void write(List<? extends T> items) throws Exception; }
  • 20. ItemProcessor • Très simple : prends un objet en entrée et en retourne un autre en sortie • Sert à implémenter la logique métier • Chainable public interface ItemProcessor<I, O> { O process(I item) throws Exception; }
  • 21. MultiThreading • Multi-threaded Step • Parallel Steps • Remote Chunking • Partitioning Step
  • 22. Multi-threaded Step • Utilisation des TaskExecutors de Spring <step id="loading"> <tasklet task-executor="taskExecutor">...</tasklet> </step>
  • 23. Parallel Steps • Utilisation des TaskExecutors de Spring • Utilisation du flow Split <job id="job1"> <split id="split1" task-executor="taskExecutor" next="step4"> <flow> <step id="step1" next="step2" /> <step id="step2" /> </flow> <flow> <step id="step3" /> </flow> </split> <step id="step4" /> </job> <beans:bean id="taskExecutor" class="org.spr...SimpleAsyncTaskExecutor"/>
  • 26. Demo

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n