62
1 JUG Lausanne 9 novembre 2010 Julien Jakubowski Olivier Bazoud Spring Batch Spring Batch

Spring Batch - Julien Jakubowski - November 2010

Embed Size (px)

DESCRIPTION

Spring Batch - Julien Jakubowski - November 2010

Citation preview

Page 1: Spring Batch - Julien Jakubowski - November 2010

1

JUG Lausanne

9 novembre 2010

Julien JakubowskiOlivier Bazoud

Spring BatchSpring Batch

Page 2: Spring Batch - Julien Jakubowski - November 2010

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

Page 3: Spring Batch - Julien Jakubowski - November 2010

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/

Page 4: Spring Batch - Julien Jakubowski - November 2010

4

Teaser➢ Quand j'écris une application Web, il y a pléthore de

frameworks Web

JSFJSF

Page 5: Spring Batch - Julien Jakubowski - November 2010

5

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

solutions de persistance

Page 6: Spring Batch - Julien Jakubowski - November 2010

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/

Page 7: Spring Batch - Julien Jakubowski - November 2010

7

Teaser➢ Spring Batch offre pourtant une solution pour vous

guider lors de l'écriture de vos batchs

Spring BatchSpring Batch

Page 8: Spring Batch - Julien Jakubowski - November 2010

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

Page 9: Spring Batch - Julien Jakubowski - November 2010

9

Batch : de quoi parle-t-on ?

➢ Batch processing = suite de traitements sur ensemble

de données...

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

Page 10: Spring Batch - Julien Jakubowski - November 2010

10

Batch : de quoi parle-t-on ?➢ … potentiellement grands volumes...

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

Page 11: Spring Batch - Julien Jakubowski - November 2010

11

Batch : de quoi parle-t-on ?

➢ … sans intervention d'un utilisateur humain.(pas d'interface graphique)

Page 12: Spring Batch - Julien Jakubowski - November 2010

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

Page 13: Spring Batch - Julien Jakubowski - November 2010

13

Batch : de quoi parle-t-on ?

➢ Un batch n'est pas un scheduler

● Cron, Quartz, $U...

● Mais un scheduler peut le lancer

Page 14: Spring Batch - Julien Jakubowski - November 2010

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

Page 15: Spring Batch - Julien Jakubowski - November 2010

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

Page 16: Spring Batch - Julien Jakubowski - November 2010

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

Page 17: Spring Batch - Julien Jakubowski - November 2010

17

Démo

Anti-patterns...

Page 18: Spring Batch - Julien Jakubowski - November 2010

18

Problèmes récurrents➢ Fiabilité

Page 19: Spring Batch - Julien Jakubowski - November 2010

19

Problèmes récurrents➢ Maintenabilité

Page 20: Spring Batch - Julien Jakubowski - November 2010

20

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

Page 21: Spring Batch - Julien Jakubowski - November 2010

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

Page 22: Spring Batch - Julien Jakubowski - November 2010

22

Schéma du batch

ItemReader ItemProcessor

RecipeStep

ItemWriter

InitialStep

InitialTasklet

Chunk Oriented Tasklet

Page 23: Spring Batch - Julien Jakubowski - November 2010

23

ItemReader

ItemProcessor

RecipeStep

ItemWriter

InitialStep

InitialTasklet

Chunk Oriented Tasklet

ItemReader

Page 24: Spring Batch - Julien Jakubowski - November 2010

24

ItemReader➢ Besoin

● Lire le XML des recettes

➢ ItemReader

● Fournir des items en entrée

<xml> SELECT … FROM ...

123;AB;456;CD;

Page 25: Spring Batch - Julien Jakubowski - November 2010

25

Morceaux de code

Page 26: Spring Batch - Julien Jakubowski - November 2010

26

ItemProcessor

ItemReader

RecipeStep

ItemWriter

InitialStep

InitialTasklet

Chunk Oriented Tasklet

ItemProcessor

Page 27: Spring Batch - Julien Jakubowski - November 2010

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 »

Page 28: Spring Batch - Julien Jakubowski - November 2010

28

Morceaux de code

Page 29: Spring Batch - Julien Jakubowski - November 2010

29

Morceaux de code

Page 30: Spring Batch - Julien Jakubowski - November 2010

30

ItemWriter

ItemReader ItemProcessor

RecipeStep

InitialStep

InitialTasklet

Chunk Oriented Tasklet

ItemWriter

Page 31: Spring Batch - Julien Jakubowski - November 2010

31

Item Writer➢ Besoin

● Décharger les bières dans une base SQL

➢ ItemWriter

● Ecrire les items

<xml>

123;AB;456;CD;

INSERT INTO...

Page 32: Spring Batch - Julien Jakubowski - November 2010

32

Morceaux de code

Page 33: Spring Batch - Julien Jakubowski - November 2010

33

Chunk

RecipeStep

InitialStep

InitialTasklet

ItemReader ItemProcessor ItemWriter

Chunk Oriented Tasklet

Page 34: Spring Batch - Julien Jakubowski - November 2010

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

Page 35: Spring Batch - Julien Jakubowski - November 2010

35

Chunk

Page 36: Spring Batch - Julien Jakubowski - November 2010

36

Morceaux de code

Page 37: Spring Batch - Julien Jakubowski - November 2010

37

Listener

RecipeStep

InitialStep

InitialTasklet

ItemReader ItemProcessor ItemWriter

Chunk Oriented Tasklet

Page 38: Spring Batch - Julien Jakubowski - November 2010

38

Listener➢ Besoin

● Création du fichier de rejet

➢ Listener

● Etre à l'écoute des événements du batch

Page 39: Spring Batch - Julien Jakubowski - November 2010

39

Morceaux de code

Page 40: Spring Batch - Julien Jakubowski - November 2010

40

Morceaux de code

Page 41: Spring Batch - Julien Jakubowski - November 2010

41

Morceaux de code

Page 42: Spring Batch - Julien Jakubowski - November 2010

42

Tasklet

ItemReader ItemProcessor

RecipeStep

ItemWriter

InitialStep

Chunk Oriented Tasklet

InitialTasklet

Page 43: Spring Batch - Julien Jakubowski - November 2010

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

Page 44: Spring Batch - Julien Jakubowski - November 2010

44

Morceaux de code

Page 45: Spring Batch - Julien Jakubowski - November 2010

45

Step

ItemReader ItemProcessor

RecipeStep

ItemWriter

InitialStep

InitialTasklet

Chunk Oriented Tasklet

Page 46: Spring Batch - Julien Jakubowski - November 2010

46

Step➢ Besoin

● Etape dans le processus du batch

● Contrôle le workflow

Page 47: Spring Batch - Julien Jakubowski - November 2010

47

Job

ItemReader ItemProcessor

RecipeStep

ItemWriter

InitialStep

InitialTasklet

Chunk Oriented Tasklet

Page 48: Spring Batch - Julien Jakubowski - November 2010

48

Job➢ Besoin

● Décrire les étapes du batch

● Composé d'une ou plusieurs steps

Spring Tool Suite

Page 49: Spring Batch - Julien Jakubowski - November 2010

49

Morceaux de code

Page 50: Spring Batch - Julien Jakubowski - November 2010

50

Traitement par lots

Page 51: Spring Batch - Julien Jakubowski - November 2010

51

Lancer un job

Page 52: Spring Batch - Julien Jakubowski - November 2010

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

Page 53: Spring Batch - Julien Jakubowski - November 2010

53

Morceaux de code

Page 54: Spring Batch - Julien Jakubowski - November 2010

54

Morceaux de code

Page 55: Spring Batch - Julien Jakubowski - November 2010

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

Page 56: Spring Batch - Julien Jakubowski - November 2010

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

Page 57: Spring Batch - Julien Jakubowski - November 2010

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

Page 58: Spring Batch - Julien Jakubowski - November 2010

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...

Page 59: Spring Batch - Julien Jakubowski - November 2010

59

Spring Batch in Action➢ http://www.manning.com/templier

Page 60: Spring Batch - Julien Jakubowski - November 2010

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/

Page 61: Spring Batch - Julien Jakubowski - November 2010

61

Questions ?

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

Page 62: Spring Batch - Julien Jakubowski - November 2010

62

ROTI

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