1. SpringBatch: une solution quasi-complète du batch processing en JEE Hamdi Makni CCJ Arrow TechDays-Sep-2009
2. Road map Exemple de batch sans SpringBatch Problématique C’est quoi spring batch? Exemple de batch avec SpringBatch Architecture Notions de base Features Best pratices références
3. Exemple sans SpringBatch public void proceedBatch() { FileCreator fileCreator = null ; try { PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer(); cfg.setLocation( new ClassPathResource("integration.properties")); cfg.postProcessBeanFactory(_beanFactory); jdbcBatchDao = (JdbcDaoBatchSupport) _beanFactory.getBean(getDaoBeanName()); fileCreator = new FileCreator("flatworm/INGMovementFlatWorm.xml", "INGMOVEMENT"+ new Date().getTime()); fileCreator.open(); fileCreator.setRecordSeperator("\n"); List records = jdbcBatchDao.findRecords(); if (records != null ) { for (Iterator iterator = records.iterator(); iterator.hasNext();) { INGMovement movement = (INGMovement) iterator.next(); fileCreator.setBean("INGMovement", movement); fileCreator.write("INGMovementRecord"); } } else { log.warn("No Data Found on DB to extract"); } fileCreator.close(); } catch (IOException e) { log.error(e.getMessage()); e.printStackTrace(); System. exit (0); } System. exit (0); }
5. Problématiques à résoudre Traitement par lot Performance Reprise d’erreurs Skip errors Gestion de transactions (ou pas?) Scénarios classiques: file<->file file<->db
6. SpringBatch Framework de batch processing en java Répond aux besoins récurrents et classiques du traitement de données par lot Fait partie de SpringPortfolio, donc basé sur Spring framework Implémentation DDD (Domain Driven Design) Solution quasi-complète Écrit par SpringSource + Accenture
8. Architecture Application : business spécifique, implémentations développeur Core : coeur de spring batch, job, step, jobrepository, joblauncher… Infrastructure : implémentations de base de ItemReader, ItemWriter,…
12. Job/step/tasklet/chunk Un job est une suite d’étape, séquentielles, parallèles, synchrones, asynchrones … Une étape est un task, une tache, à exécuter Un task est une simple commande, ou bien une itération de traitements sur des lots de données (ou chunk)
14. Step/task Deux types de step: Simple tasklet: une simple tache à exécuter Chunk (ou item V1) oriented tasklet: traitement élément par élément, ou lot par lot.
17. ItemReader Deux principaux types de reader: file reader, ou DB reader Exemple de itemReader: FlatFileItemReader JdbcCursorItemReader JmsItemReader JpaPagingItemReader ItemReaderAdapter
20. ItemWriter Comme pour les reader, les 2 types de writer les plus utilisés sont les File Writer et les DB Writer. Exemples d’implémentation de Writer: FlatFileItemWriter JdbcBatchItemWriter ItemWriterAdapter CompositeItemWriter JmsItemWriter HibernateItemWriter
25. Traitement conditionnel Contrôler le passage d’une étape à une autre Le passage d’une étape à une autre dépend du résultat de l’étape courante <job id="job"> <step id="stepA" parent="s1"> <next on="*" to="stepB" /> <next on="FAILED" to="stepC" /> </step> <step id="stepB" parent="s2" next="stepC" /> <step id="stepC" parent="s3" /> </job>
26. Features: multithreading Il suffit de mettre un TaskExecutor dans son Step pour que tout se lance en multithread Remarque: tout n’est pas en thread safe dans springBatch. Il faut développer ses propres reader et services synchronisés
28. Features: Parallel step L’une des nouvelles fonctionnalités très utiles de SpringBatch2 Permet de lancer plusieurs étapes en même temps, et non en séquentiel. Une nouvelle notion de Flow
30. Remote processing Utilisé si la partie traitement est plus coûteuse que la lecture Permet de traiter les éléments sur plusieurs process distant Utilisation de JMS, de solutions de grid computing, de partage de mémoire
32. Best pratices Paging Staging file Lecture moins coûteuse que le traitement Parallel processing Éviter les caches à longues durée de vie Splitter les gros fichiers