Post on 28-May-2015
description
1
Spring User Group France
Mardi 27 Avril 2010
Julien JakubowskiOlivier Bazoud
Spring BatchSpring Batch
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
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 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
9
Batch : de quoi parle-t-on ?
➢ Batch processing = Traitement par lots
http://www.flickr.com/photos/burnblue/308441464/
10
Batch : de quoi parle-t-on ?➢ Opérations métiers sur de grands volumes
http://www.flickr.com/photos/claudiasofia99/2878579560/
11
Batch : de quoi parle-t-on ?
➢ 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 des notions de Spring Batch, progres-
sivement
➢ Retours d'expérience
➢ Forces et faiblesses
➢ Notions avancées
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
Trace Parallélisme
Partitionnement
Une infrastructure pour les batchs
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
17
Démo
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 de notre code custom
● writers, processors etc...
➢ Tests d'intégration
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 50Mo + 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
✔ 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 vous de choisir pour une prochaine session...A vous de choisir pour une prochaine session...
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/
60
Questions ?
http://www.flickr.com/photos/crystaljingsr/3914729343/in/set-72157622354789320/
61
ROTI
http://www.flickr.com/photos/34943981@N00/202923614/