SpringBatch: une solution quasi-complète du batch processing en JEE   Hamdi Makni CCJ Arrow TechDays-Sep-2009
Road map <ul><li>Exemple de batch sans SpringBatch </li></ul><ul><li>Problématique </li></ul><ul><li>C’est quoi spring bat...
Exemple sans SpringBatch <ul><li>public   void  proceedBatch() { </li></ul><ul><li>FileCreator fileCreator =  null ; </li>...
Exemple sans SpringBatch <ul><li>(DEMO) </li></ul>
Problématiques à résoudre <ul><li>Traitement par lot </li></ul><ul><li>Performance </li></ul><ul><li>Reprise d’erreurs </l...
SpringBatch <ul><li>Framework de batch processing en java </li></ul><ul><ul><li>Répond aux besoins récurrents et classique...
Exemple avec SpringBatch <ul><li>(DEMO) </li></ul>
Architecture <ul><li>Application : business spécifique, implémentations développeur </li></ul><ul><li>Core : coeur de spri...
Notions de base SpringBatch
JobRepository <ul><li>Référentiel (ou dépôt) de SpringBatch </li></ul><ul><li>Deux implémentations: </li></ul><ul><ul><li>...
JobLauncher <ul><li><bean id= &quot;jobLauncher&quot;  class= &quot;org.springframework.batch.core.launch.support.SimpleJo...
Job/step/tasklet/chunk <ul><li>Un job est une suite d’étape, séquentielles, parallèles, synchrones, asynchrones … </li></u...
Job <ul><li><batch:job id= &quot;accountFilterToClientsJob&quot; </li></ul><ul><li>job-repository= &quot;jobRepository&quo...
Step/task <ul><li>Deux types de step: </li></ul><ul><ul><li>Simple tasklet: une simple tache à exécuter </li></ul></ul><ul...
Simple tasklet <ul><li><batch:step id= &quot;initBatchStagingStep&quot; > </li></ul><ul><li><batch:tasklet job-repository=...
Chunk oriented tasklet
ItemReader <ul><li>Deux principaux types de reader: file reader, ou DB reader </li></ul><ul><li>Exemple de itemReader: </l...
Flat File Item Reader <ul><li><bean id= &quot;accountFilterToClientsReader&quot;  class= &quot;org.springframework.batch.i...
DataBase Reader <ul><li><bean id= &quot;spFundAccountItemReader&quot; </li></ul><ul><li>class= &quot;org.springframework.b...
ItemWriter <ul><li>Comme pour les reader, les 2 types de writer les plus utilisés sont les File Writer et les DB Writer. <...
Flat File Item Writer <ul><li><bean id= &quot;contratBaseItemWriter&quot;  class= &quot;org.springframework.batch.item.fil...
Data Base Writer <ul><li><bean id= &quot;accountFilterToClientsWriter&quot; </li></ul><ul><li>class= &quot;org.springframe...
Item Writer Adapter <ul><li>Délègue l’écriture à un service business: réutiliser un bean business </li></ul><ul><ul><li><b...
Features: skip, rollback, no-rollback, restart <ul><li><batch:step id= &quot;stagingObjectClientStep&quot;  > </li></ul><u...
Traitement conditionnel <ul><li>Contrôler le passage d’une étape à une autre </li></ul><ul><li>Le passage d’une étape à un...
Features: multithreading <ul><li>Il suffit de mettre un TaskExecutor dans son Step pour que tout se lance en multithread <...
Features: multithreading <ul><li><bean id=&quot;taskExecutor&quot; class=&quot;org.springframework.core.task.SimpleAsyncTa...
Features: Parallel step <ul><li>L’une des nouvelles fonctionnalités très utiles de SpringBatch2 </li></ul><ul><li>Permet d...
Features: Parallel step <ul><li><batch:job id= &quot;migrationCCIngToClientsJob&quot;  parent= &quot;simpleJob&quot; > </l...
Remote processing <ul><li>Utilisé si la partie traitement est plus coûteuse que la lecture </li></ul><ul><li>Permet de tra...
Features: Partitionning <ul><li>Partitionner les données et les traiter sur plusieurs étapes en parallèle </li></ul>
Best pratices <ul><li>Paging </li></ul><ul><li>Staging file </li></ul><ul><li>Lecture moins coûteuse que le traitement </l...
Références <ul><li>http://static.springsource.org/spring-batch/reference/html-single/index.html </li></ul><ul><li>http://w...
Upcoming SlideShare
Loading in...5
×

Spring Batch

4,796

Published on

SpringBatch framework pres

Published in: Technology, Education
1 Comment
2 Likes
Statistics
Notes
No Downloads
Views
Total Views
4,796
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
179
Comments
1
Likes
2
Embeds 0
No embeds

No notes for slide

Spring Batch

  1. 1. SpringBatch: une solution quasi-complète du batch processing en JEE Hamdi Makni CCJ Arrow TechDays-Sep-2009
  2. 2. Road map <ul><li>Exemple de batch sans SpringBatch </li></ul><ul><li>Problématique </li></ul><ul><li>C’est quoi spring batch? </li></ul><ul><li>Exemple de batch avec SpringBatch </li></ul><ul><li>Architecture </li></ul><ul><li>Notions de base </li></ul><ul><li>Features </li></ul><ul><li>Best pratices </li></ul><ul><li>références </li></ul>
  3. 3. Exemple sans SpringBatch <ul><li>public void proceedBatch() { </li></ul><ul><li>FileCreator fileCreator = null ; </li></ul><ul><li>try { </li></ul><ul><li>PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer(); </li></ul><ul><li>cfg.setLocation( new ClassPathResource(&quot;integration.properties&quot;)); </li></ul><ul><li>cfg.postProcessBeanFactory(_beanFactory); </li></ul><ul><li>jdbcBatchDao = (JdbcDaoBatchSupport) _beanFactory.getBean(getDaoBeanName()); </li></ul><ul><li>fileCreator = new FileCreator(&quot;flatworm/INGMovementFlatWorm.xml&quot;, &quot;INGMOVEMENT&quot;+ new Date().getTime()); </li></ul><ul><li>fileCreator.open(); </li></ul><ul><li>fileCreator.setRecordSeperator(&quot; &quot;); </li></ul><ul><li>List records = jdbcBatchDao.findRecords(); </li></ul><ul><li>if (records != null ) { </li></ul><ul><li>for (Iterator iterator = records.iterator(); iterator.hasNext();) { </li></ul><ul><li>INGMovement movement = (INGMovement) iterator.next(); </li></ul><ul><li>fileCreator.setBean(&quot;INGMovement&quot;, movement); </li></ul><ul><li>fileCreator.write(&quot;INGMovementRecord&quot;); </li></ul><ul><li>} </li></ul><ul><li>} else { </li></ul><ul><li>log.warn(&quot;No Data Found on DB to extract&quot;); </li></ul><ul><li>} </li></ul><ul><li>fileCreator.close(); </li></ul><ul><li>} catch (IOException e) { </li></ul><ul><li>log.error(e.getMessage()); </li></ul><ul><li>e.printStackTrace(); </li></ul><ul><li>System. exit (0); </li></ul><ul><li>} </li></ul><ul><li>System. exit (0); </li></ul><ul><li>} </li></ul>
  4. 4. Exemple sans SpringBatch <ul><li>(DEMO) </li></ul>
  5. 5. Problématiques à résoudre <ul><li>Traitement par lot </li></ul><ul><li>Performance </li></ul><ul><li>Reprise d’erreurs </li></ul><ul><li>Skip errors </li></ul><ul><li>Gestion de transactions (ou pas?) </li></ul><ul><li>Scénarios classiques: </li></ul><ul><ul><li>file<->file </li></ul></ul><ul><ul><li>file<->db </li></ul></ul>
  6. 6. SpringBatch <ul><li>Framework de batch processing en java </li></ul><ul><ul><li>Répond aux besoins récurrents et classiques du traitement de données par lot </li></ul></ul><ul><li>Fait partie de SpringPortfolio, donc basé sur Spring framework </li></ul><ul><li>Implémentation DDD (Domain Driven Design) </li></ul><ul><li>Solution quasi-complète </li></ul><ul><li>Écrit par SpringSource + Accenture </li></ul>
  7. 7. Exemple avec SpringBatch <ul><li>(DEMO) </li></ul>
  8. 8. Architecture <ul><li>Application : business spécifique, implémentations développeur </li></ul><ul><li>Core : coeur de spring batch, job, step, jobrepository, joblauncher… </li></ul><ul><li>Infrastructure : implémentations de base de ItemReader, ItemWriter,… </li></ul>
  9. 9. Notions de base SpringBatch
  10. 10. JobRepository <ul><li>Référentiel (ou dépôt) de SpringBatch </li></ul><ul><li>Deux implémentations: </li></ul><ul><ul><li><batch:job-repository id= &quot;jobRepositoryMap&quot; /> </li></ul></ul><ul><ul><li><batch:job-repository id= &quot;jobRepository&quot; data-source= &quot;dataSource&quot; transaction-manager= &quot;transactionManager&quot; table-prefix= &quot;BATCH_&quot; isolation-level-for-create= &quot;SERIALIZABLE&quot; /> </li></ul></ul>
  11. 11. JobLauncher <ul><li><bean id= &quot;jobLauncher&quot; class= &quot;org.springframework.batch.core.launch.support.SimpleJobLauncher&quot; > <property name= &quot;jobRepository&quot; ref= &quot;jobRepository&quot; /> </bean> </li></ul>
  12. 12. Job/step/tasklet/chunk <ul><li>Un job est une suite d’étape, séquentielles, parallèles, synchrones, asynchrones … </li></ul><ul><li>Une étape est un task, une tache, à exécuter </li></ul><ul><li>Un task est une simple commande, ou bien une itération de traitements sur des lots de données (ou chunk) </li></ul>
  13. 13. Job <ul><li><batch:job id= &quot;accountFilterToClientsJob&quot; </li></ul><ul><li>job-repository= &quot;jobRepository&quot; > </li></ul><ul><li><batch:step id= &quot;accountFilterToClientsStep&quot; > </li></ul><ul><li><batch:tasklet> </li></ul><ul><li><batch:chunk commit-interval= &quot;100&quot; </li></ul><ul><li>reader= &quot;accountFilterToClientsReader&quot; writer= &quot;accountFilterToClientsWriter&quot; </li></ul><ul><li>processor= &quot;accountFilterToClientsProcessor&quot; > </li></ul><ul><li></batch:chunk> </li></ul><ul><li></batch:tasklet> </li></ul><ul><li></batch:step> </li></ul><ul><li></batch:job> </li></ul>
  14. 14. Step/task <ul><li>Deux types de step: </li></ul><ul><ul><li>Simple tasklet: une simple tache à exécuter </li></ul></ul><ul><ul><li>Chunk (ou item V1) oriented tasklet: traitement élément par élément, ou lot par lot. </li></ul></ul>
  15. 15. Simple tasklet <ul><li><batch:step id= &quot;initBatchStagingStep&quot; > </li></ul><ul><li><batch:tasklet job-repository= &quot;jobRepository&quot; </li></ul><ul><li>transaction-manager= &quot;jpaTransactionManager&quot; ref= &quot;initBatchStagingTasklet&quot; > </li></ul><ul><li></batch:tasklet> </li></ul><ul><li></batch:step> </li></ul><ul><li><bean id= &quot;initBatchStagingTasklet&quot; class= « coco.batch.springbatch.tasklet.JdbcTasklet&quot; > </li></ul><ul><li><property name= &quot;dataSource&quot; ref= &quot;dataSource&quot; /> </li></ul><ul><li><property name= &quot;sqlRequest&quot; value= &quot;update batch_staging set job_id = ? &quot; /> </li></ul><ul><li></bean> </li></ul>
  16. 16. Chunk oriented tasklet
  17. 17. ItemReader <ul><li>Deux principaux types de reader: file reader, ou DB reader </li></ul><ul><li>Exemple de itemReader: </li></ul><ul><ul><li>FlatFileItemReader </li></ul></ul><ul><ul><li>JdbcCursorItemReader </li></ul></ul><ul><ul><li>JmsItemReader </li></ul></ul><ul><ul><li>JpaPagingItemReader </li></ul></ul><ul><ul><li>ItemReaderAdapter </li></ul></ul>
  18. 18. Flat File Item Reader <ul><li><bean id= &quot;accountFilterToClientsReader&quot; class= &quot;org.springframework.batch.item.file.FlatFileItemReader&quot; > </li></ul><ul><li><property name= &quot;resource&quot; > </li></ul><ul><li><bean class= &quot;org.springframework.core.io.FileSystemResource&quot; > </li></ul><ul><li><constructor-arg type= &quot;java.lang.String« value= &quot;${file.thaler.accountsfilter.in}&quot; /> </li></ul><ul><li></bean> </li></ul><ul><li></property> </li></ul><ul><li><property name= &quot;lineMapper&quot; > </li></ul><ul><li><bean class= &quot;org.springframework.batch.item.file.mapping.DefaultLineMapper&quot; > </li></ul><ul><li><property name= &quot;lineTokenizer&quot; > </li></ul><ul><li><bean class= &quot;org.springframework.batch.item.file.transform.DelimitedLineTokenizer&quot; > </li></ul><ul><li><property name= &quot;delimiter&quot; value= &quot;;&quot; /> </li></ul><ul><li><property name= &quot;names&quot; value= &quot;accNumber,accType&quot; ></property> </li></ul><ul><li></bean> </li></ul><ul><li></property> </li></ul><ul><li><property name= &quot;fieldSetMapper&quot; > </li></ul><ul><li><bean class= &quot;org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper&quot; > </li></ul><ul><li><property name= &quot;prototypeBeanName&quot; value= &quot;accountsFilter&quot; /> </li></ul><ul><li></bean> </li></ul><ul><li></property> </li></ul><ul><li></bean> </li></ul><ul><li></property> </li></ul><ul><li></bean> </li></ul>
  19. 19. DataBase Reader <ul><li><bean id= &quot;spFundAccountItemReader&quot; </li></ul><ul><li>class= &quot;org.springframework.batch.item.database.JdbcCursorItemReader&quot; > </li></ul><ul><li><property name= &quot;dataSource&quot; ref= &quot;${dataSource}&quot; /> </li></ul><ul><li><property name= &quot;sql&quot; value= &quot; select cl1 from tab2&quot; /> </li></ul><ul><li><property name= &quot;rowMapper&quot; > </li></ul><ul><li><bean class= &quot;coco.project.MyRowMapper&quot; /> </li></ul><ul><li></property> </li></ul><ul><li></bean> </li></ul>
  20. 20. ItemWriter <ul><li>Comme pour les reader, les 2 types de writer les plus utilisés sont les File Writer et les DB Writer. </li></ul><ul><li>Exemples d’implémentation de Writer: </li></ul><ul><ul><li>FlatFileItemWriter </li></ul></ul><ul><ul><li>JdbcBatchItemWriter </li></ul></ul><ul><ul><li>ItemWriterAdapter </li></ul></ul><ul><ul><li>CompositeItemWriter </li></ul></ul><ul><ul><li>JmsItemWriter </li></ul></ul><ul><ul><li>HibernateItemWriter </li></ul></ul>
  21. 21. Flat File Item Writer <ul><li><bean id= &quot;contratBaseItemWriter&quot; class= &quot;org.springframework.batch.item.file.FlatFileItemWriter&quot; > </li></ul><ul><li><property name= &quot;headerCallback&quot; ref= &quot;contratBaseHeaderCallback&quot; /> </li></ul><ul><li><property name= &quot;footerCallback&quot; ref= &quot;contratBaseFooterCallback&quot; /> </li></ul><ul><li><property name= &quot;resource&quot; ref= &quot;contratBaseFileOutputLocator&quot; /> </li></ul><ul><li><property name= &quot;lineAggregator&quot; > </li></ul><ul><li><bean </li></ul><ul><li>class= &quot;org.springframework.batch.item.file.transform.DelimitedLineAggregator&quot; > </li></ul><ul><li><property name= &quot;delimiter&quot; value= &quot;;&quot; /> </li></ul><ul><li><property name= &quot;fieldExtractor&quot; > </li></ul><ul><li><bean class= &quot;org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor&quot; > </li></ul><ul><li><property name= &quot;names&quot; value= &quot;recordType,name1,name2&quot; /> </li></ul><ul><li></bean> </li></ul><ul><li></property> </li></ul><ul><li></bean> </li></ul><ul><li></property> </li></ul><ul><li></bean> </li></ul>
  22. 22. Data Base Writer <ul><li><bean id= &quot;accountFilterToClientsWriter&quot; </li></ul><ul><li>class= &quot;org.springframework.batch.item.database.JdbcBatchItemWriter&quot; > </li></ul><ul><li><property name= &quot;dataSource&quot; ref= &quot;dataSource&quot; /> </li></ul><ul><li><property name= &quot;sql&quot; </li></ul><ul><li>value= &quot;insert into cl_accounts_filter (ACC_NUMBER, ACC_TYPE, B2B , MAJ_DT_DATECRE, MAJ_DT_DATEMAJ) </li></ul><ul><li>values (:accNumber, :accType, :b2b, :majDtDateCre, :majDtDatemaj)&quot; /> </li></ul><ul><li><property name= &quot;itemSqlParameterSourceProvider&quot; > </li></ul><ul><li><bean </li></ul><ul><li>class= &quot;org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider&quot; /> </li></ul><ul><li></property> </li></ul><ul><li></bean> </li></ul>
  23. 23. Item Writer Adapter <ul><li>Délègue l’écriture à un service business: réutiliser un bean business </li></ul><ul><ul><li><bean id= &quot;ingClientItemWriter&quot; </li></ul></ul><ul><ul><li>class= &quot;org.springframework.batch.item.adapter.ItemWriterAdapter&quot; > </li></ul></ul><ul><ul><li><property name= &quot;targetObject&quot; ref= &quot; simpleService&quot; /> </li></ul></ul><ul><ul><li><property name= &quot; targetMethod &quot; value= &quot;saveObject&quot; /> </li></ul></ul><ul><ul><li></bean> </li></ul></ul>
  24. 24. Features: skip, rollback, no-rollback, restart <ul><li><batch:step id= &quot;stagingObjectClientStep&quot; > </li></ul><ul><ul><li><batch:tasklet job-repository= &quot;jobRepository&quot; transaction-manager= &quot;jpaTransactionManager&quot; > </li></ul></ul><ul><ul><ul><li><batch:chunk </li></ul></ul></ul><ul><ul><ul><ul><li>reader= &quot;clientStagingFileItemReader&quot; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>writer= &quot;stagingObjectClientWriter&quot; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>commit-interval= &quot;100&quot; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>skip-limit = &quot;100000&quot; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>task-executor= &quot;taskExecutor&quot; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>retry-limit = &quot;2&quot; > </li></ul></ul></ul></ul><ul><ul><ul><ul><li><batch: skippable-exception-classes > </li></ul></ul></ul></ul><ul><ul><ul><ul><li>coco .exception.BusinessException </li></ul></ul></ul></ul><ul><ul><ul><ul><li></batch: skippable-exception-classes > </li></ul></ul></ul></ul><ul><ul><ul><ul><li><batch: fatal-exception-classes > </li></ul></ul></ul></ul><ul><ul><ul><ul><li>coco .exception.FatalException </li></ul></ul></ul></ul><ul><ul><ul><ul><li></batch: fatal-exception-classes > </li></ul></ul></ul></ul><ul><ul><ul><ul><li><batch: retryable-exception-classes > </li></ul></ul></ul></ul><ul><ul><ul><ul><li>coco .exception.NetworkException </li></ul></ul></ul></ul><ul><ul><ul><ul><li></batch: retryable-exception-classes > </li></ul></ul></ul></ul><ul><ul><ul><li></batch:chunk> </li></ul></ul></ul><ul><ul><ul><li><batch: no-rollback-exception-classes > </li></ul></ul></ul><ul><ul><ul><li>coco .exception.ValidationException </li></ul></ul></ul><ul><ul><ul><li></batch: no-rollback-exception-classes > </li></ul></ul></ul><ul><ul><li></batch:tasklet> </li></ul></ul><ul><li></batch:step> </li></ul>
  25. 25. Traitement conditionnel <ul><li>Contrôler le passage d’une étape à une autre </li></ul><ul><li>Le passage d’une étape à une autre dépend du résultat de l’étape courante </li></ul><ul><li><job id=&quot;job&quot;> </li></ul><ul><ul><li><step id=&quot;stepA&quot; parent=&quot;s1&quot;> </li></ul></ul><ul><ul><ul><li><next on=&quot;*&quot; to=&quot;stepB&quot; /> </li></ul></ul></ul><ul><ul><ul><li><next on=&quot;FAILED&quot; to=&quot;stepC&quot; /> </li></ul></ul></ul><ul><ul><li></step> </li></ul></ul><ul><ul><li><step id=&quot;stepB&quot; parent=&quot;s2&quot; next=&quot;stepC&quot; /> </li></ul></ul><ul><ul><li><step id=&quot;stepC&quot; parent=&quot;s3&quot; /> </li></ul></ul><ul><li></job> </li></ul>
  26. 26. Features: multithreading <ul><li>Il suffit de mettre un TaskExecutor dans son Step pour que tout se lance en multithread </li></ul><ul><li>Remarque: tout n’est pas en thread safe dans springBatch. </li></ul><ul><ul><li>Il faut développer ses propres reader et services synchronisés </li></ul></ul>
  27. 27. Features: multithreading <ul><li><bean id=&quot;taskExecutor&quot; class=&quot;org.springframework.core.task.SimpleAsyncTaskExecutor&quot; /> </li></ul><ul><li><batch:step id=&quot;stagingObjectClientStep&quot; > </li></ul><ul><ul><li><batch:tasklet job-repository=&quot;jobRepository&quot; transaction-manager=&quot;jpaTransactionManager&quot;> </li></ul></ul><ul><ul><ul><li><batch:chunk reader=&quot;ingClientStagingFileItemReader&quot; writer=&quot;stagingObjectClientWriter&quot; task-executor=&quot; taskExecutor &quot; > </li></ul></ul></ul><ul><ul><ul><li></batch:chunk> </li></ul></ul></ul><ul><ul><li></batch:tasklet> </li></ul></ul><ul><li></batch:step> </li></ul>
  28. 28. Features: Parallel step <ul><li>L’une des nouvelles fonctionnalités très utiles de SpringBatch2 </li></ul><ul><li>Permet de lancer plusieurs étapes en même temps, et non en séquentiel. </li></ul><ul><li>Une nouvelle notion de Flow </li></ul>
  29. 29. Features: Parallel step <ul><li><batch:job id= &quot;migrationCCIngToClientsJob&quot; parent= &quot;simpleJob&quot; > </li></ul><ul><ul><li><batch:step id= &quot;cleanBatchStagingStep_&quot; parent= &quot;cleanBatchStagingStep&quot; next= &quot;stagingFileStep&quot; /> </li></ul></ul><ul><ul><li><batch:split task-executor= &quot;taskExecutor&quot; id= &quot;stagingFileStep&quot; next= &quot;headerFooterClientStep_&quot; > </li></ul></ul><ul><ul><ul><li><batch:flow> </li></ul></ul></ul><ul><ul><ul><li><batch:step id= &quot;stagingFileClientStep_&quot; parent= &quot;stagingFileClientStep&quot; /> </li></ul></ul></ul><ul><ul><ul><li></batch:flow> </li></ul></ul></ul><ul><ul><ul><li><batch:flow> </li></ul></ul></ul><ul><ul><ul><li><batch:step id= &quot;stagingFileContractStep_&quot; parent= &quot;stagingFileContractStep&quot; /> </li></ul></ul></ul><ul><ul><ul><li></batch:flow> </li></ul></ul></ul><ul><ul><ul><li><batch:flow> </li></ul></ul></ul><ul><ul><ul><li><batch:step id= &quot;stagingFileRelationStep_&quot; parent= &quot;stagingFileRelationStep&quot; /> </li></ul></ul></ul><ul><ul><ul><li></batch:flow> </li></ul></ul></ul><ul><ul><li></batch:split> </li></ul></ul><ul><li></batch:job> </li></ul>
  30. 30. Remote processing <ul><li>Utilisé si la partie traitement est plus coûteuse que la lecture </li></ul><ul><li>Permet de traiter les éléments sur plusieurs process distant </li></ul><ul><li>Utilisation de JMS, de solutions de grid computing, de partage de mémoire </li></ul>
  31. 31. Features: Partitionning <ul><li>Partitionner les données et les traiter sur plusieurs étapes en parallèle </li></ul>
  32. 32. Best pratices <ul><li>Paging </li></ul><ul><li>Staging file </li></ul><ul><li>Lecture moins coûteuse que le traitement </li></ul><ul><li>Parallel processing </li></ul><ul><li>Éviter les caches à longues durée de vie </li></ul><ul><li>Splitter les gros fichiers </li></ul>
  33. 33. Références <ul><li>http://static.springsource.org/spring-batch/reference/html-single/index.html </li></ul><ul><li>http://www.cafebabe.me/2008/05/spring-batch-hello-world-1.html </li></ul><ul><li>http:// static.springsource.org / spring-batch / </li></ul><ul><li>http://blog.octo.com/spring-batch-par-quel-bout-le-prendre/ </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×