JUG Lausanne

Spring Batch
9 novembre 2010

Julien Jakubowski
Olivier Bazoud
1
Intervenants
➢

Olivier Bazoud, FullSIX, 12 ans d'expérience
●

●

Java EE / Spring, Spring Batch, Groovy, Grails

●

Co auteur de « Spring Batch in Action »

●

➢

Architecte technique de sites web à fort traffic

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
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 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 = suite de traitements sur ensemble
de données...

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

9
Batch : de quoi parle-t-on ?
➢

… potentiellement grands volumes...

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

10
Batch : de quoi parle-t-on ?
➢

… sans intervention d'un utilisateur humain.
(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 progressive des notions de Spring Batch

➢

Retours d'expérience

➢

Forces et faiblesses

➢

Questions / réponses

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

Parallélisme
Partitionnement

Une infrastructure pour les batchs
Reprise sur erreurs
15
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

16
Démo

Anti-patterns...

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
➢

Besoin
●

➢

ItemReader

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 facilités via le découpage Spring Batch
●

➢

writers, processors etc...

Tests d'intégration facilités par Spring
●

@RunWith

●

Step, Job

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 100Mo + 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
...the Spring way, Spring Intégration

✔ 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 votre disposition...

58
Spring Batch in Action
➢

http://www.manning.com/templier

59
Liens
➢

Spring User Group Paris
●

➢

Le code de la présentation
●

➢

http://code.google.com/p/fr-sug-spring-batch

Spring Batch 2.1.x
●

➢

http://groups.google.fr/group/sugfr

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/

60
Questions ?

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

61
ROTI

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

62

Spring Batch - Julien Jakubowski - November 2010