Upload
jug-lausanne
View
295
Download
4
Tags:
Embed Size (px)
DESCRIPTION
Spring Batch - Julien Jakubowski - November 2010
Citation preview
1
JUG Lausanne
9 novembre 2010
Julien JakubowskiOlivier Bazoud
Spring BatchSpring Batch
2
Intervenants ➢ Olivier Bazoud, FullSIX, 12 ans d'expérience
● Architecte technique de sites web à fort traffic
● Java EE / Spring, Spring Batch, Groovy, Grails
● Co auteur de « Spring Batch in Action »
● Spring User Group France
➢ Julien Jakubowski, OCTO Technology
● Architecte, 10 ans d'expérience
● Spécialisé Java EE / Spring
● Productivité et qualité des développements
● Ch'ti JUG, Agile Tour Lille
3
De quoi va-t-on parler ce soir ?➢ On va parler de batchs en Java ...
Spring BatchSpring Batch
➢ … et aussi de bière
http://www.flickr.com/photos/fromeyetopixel/2559391584/
4
Teaser➢ Quand j'écris une application Web, il y a pléthore de
frameworks Web
JSFJSF
5
Teaser➢ Quand j'accède à une base de données, il y a moult
solutions de persistance
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/
7
Teaser➢ Spring Batch offre pourtant une solution pour vous
guider lors de l'écriture de vos batchs
Spring BatchSpring Batch
8
Nos objectifs➢ En sortant de la salle, vous :
● Savez identifier certains problèmes récurrents avec les
batchs écrits en Java
● Savez si Spring Batch est utile pour vous (ou pas)
● Avez intégré les notions principales
● Pouvez faire un batch « Spring Batch » demain
9
Batch : de quoi parle-t-on ?
➢ Batch processing = suite de traitements sur ensemble
de données...
http://www.flickr.com/photos/burnblue/308441464/
10
Batch : de quoi parle-t-on ?➢ … potentiellement grands volumes...
http://www.flickr.com/photos/claudiasofia99/2878579560/
11
Batch : de quoi parle-t-on ?
➢ … sans intervention d'un utilisateur humain.(pas d'interface graphique)
12
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
13
Batch : de quoi parle-t-on ?
➢ Un batch n'est pas un scheduler
● Cron, Quartz, $U...
● Mais un scheduler peut le lancer
14
Ce qui vous attend➢ Spring Batch en 1 slide
➢ Un batch « à poil »
➢ Le même en Spring Batch
➢ Introduction progressive des notions de Spring Batch
➢ Retours d'expérience
➢ Forces et faiblesses
➢ Questions / réponses
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
Reprise sur erreurs
Parallélisme
Partitionnement
Une infrastructure pour les batchs
16
Beer batch➢ Implémentation « naïve »
➢ 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
17
Démo
Anti-patterns...
18
Problèmes récurrents➢ Fiabilité
19
Problèmes récurrents➢ Maintenabilité
20
Problèmes récurrents➢ Réinvention de la roue
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
22
Schéma du batch
ItemReader ItemProcessor
RecipeStep
ItemWriter
InitialStep
InitialTasklet
Chunk Oriented Tasklet
23
ItemReader
ItemProcessor
RecipeStep
ItemWriter
InitialStep
InitialTasklet
Chunk Oriented Tasklet
ItemReader
24
ItemReader➢ Besoin
● Lire le XML des recettes
➢ ItemReader
● Fournir des items en entrée
<xml> SELECT … FROM ...
123;AB;456;CD;
25
Morceaux de code
26
ItemProcessor
ItemReader
RecipeStep
ItemWriter
InitialStep
InitialTasklet
Chunk Oriented Tasklet
ItemProcessor
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 »
28
Morceaux de code
29
Morceaux de code
30
ItemWriter
ItemReader ItemProcessor
RecipeStep
InitialStep
InitialTasklet
Chunk Oriented Tasklet
ItemWriter
31
Item Writer➢ Besoin
● Décharger les bières dans une base SQL
➢ ItemWriter
● Ecrire les items
<xml>
123;AB;456;CD;
INSERT INTO...
32
Morceaux de code
33
Chunk
RecipeStep
InitialStep
InitialTasklet
ItemReader ItemProcessor ItemWriter
Chunk Oriented Tasklet
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
35
Chunk
36
Morceaux de code
37
Listener
RecipeStep
InitialStep
InitialTasklet
ItemReader ItemProcessor ItemWriter
Chunk Oriented Tasklet
38
Listener➢ Besoin
● Création du fichier de rejet
➢ Listener
● Etre à l'écoute des événements du batch
39
Morceaux de code
40
Morceaux de code
41
Morceaux de code
42
Tasklet
ItemReader ItemProcessor
RecipeStep
ItemWriter
InitialStep
Chunk Oriented Tasklet
InitialTasklet
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
44
Morceaux de code
45
Step
ItemReader ItemProcessor
RecipeStep
ItemWriter
InitialStep
InitialTasklet
Chunk Oriented Tasklet
46
Step➢ Besoin
● Etape dans le processus du batch
● Contrôle le workflow
47
Job
ItemReader ItemProcessor
RecipeStep
ItemWriter
InitialStep
InitialTasklet
Chunk Oriented Tasklet
48
Job➢ Besoin
● Décrire les étapes du batch
● Composé d'une ou plusieurs steps
Spring Tool Suite
49
Morceaux de code
50
Traitement par lots
51
Lancer un job
52
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
Sonar
53
Morceaux de code
54
Morceaux de code
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
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 100Mo + SQL; Gain : de 60 mn à 8mn
● 10 fichiers 4Mo + SQL; Gain : de 10mn à 1mn30s
57
Forces et faiblesses
✔ Fiabilité et bons patterns
✔ Tests, TDD
✔ Batchs complexes mieux maintenables
✔ Bénéficie de fonctions avancées à moindre coût
...the Spring way, Spring Intégration
✔ Productivité, à terme...
✗ … après avoir payé le ticket d'entrée
58
Notions avancées non-abordées➢ Partionning, parallélisme, remoting
➢ Flow
➢ Reprise sur erreurs, Skipping
➢ Infrastructure pour les batchs
➢ Spring Batch Admin
A votre disposition...A votre disposition...
60
Liens➢ Spring User Group Paris
● http://groups.google.fr/group/sugfr
➢ Le code de la présentation● http://code.google.com/p/fr-sug-spring-batch
➢ Spring Batch 2.1.x● http://static.springsource.org/spring-batch
➢ Articles sur le web● http://www.theserverside.com/news/1363855/Spring-Batch-Overview
● http://www.infoq.com/presentations/syer-introducing-spring-batch
● http://blog.zenika.com/index.php?post/2010/03/05/To-batch-or-not-to-batch
● http://blog.octo.com/spring-batch-par-quel-bout-le-prendre/
61
Questions ?
http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/
62
ROTI
http://www.flickr.com/photos/34943981@N00/202923614/