Bonjour,
j'ai un batch qui prenait pour arguments d'entrée, le fichier à traiter et une date de traitement.
Le reader est de ce type :
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <bean id="adherentsItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step"> <property name="resource" value="#{jobParameters['inputResource']}"/> <property name="lineMapper" ref="adherentsLineMapper"/> </bean> <bean id="adherentsLineMapper" class="org.springframework.batch.item.file.mapping.DefaultLineMapper"> <property name="lineTokenizer" ref="adherentsLineTokenizer"/> <property name="fieldSetMapper" ref="adherentsFieldSetMapper"/> </bean> <bean id="adherentsLineTokenizer" class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer"> <property name="delimiter" value="|"/> <property name="names" value="xxx,xx,xxx,xxx,xxx"/> </bean>
Mais, il y a eu un changement. L'un des fichiers en entrée peut contenir jusqu'à 45 000 000 de lignes !!
Une des pistes à suivre c'est de couper ce fichier en 45 fichiers de 1 000 000 de lignes (mais si vous avez une solution pour lire un fichier de 45 000 000 de lignes, je suis preneur). Je dois donc changer mon reader afin de lire plusieurs fichiers .dat en entrée. Voici ma modification :
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="adherentsItemReader" class="org.springframework.batch.item.file.MultiResourceItemReader"> <property name="resources" value="classpath:dat/ExamResult*.dat" /> <property name="delegate" ref="flatFileItemReader" /> </bean> <bean id="flatFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step"> <property name="lineMapper" ref="adherentsLineMapper"/> </bean> <bean id="adherentsLineMapper" class="org.springframework.batch.item.file.mapping.DefaultLineMapper"> <property name="lineTokenizer" ref="adherentsLineTokenizer"/> <property name="fieldSetMapper" ref="adherentsFieldSetMapper"/> </bean> <bean id="adherentsLineTokenizer" class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer"> <property name="delimiter" value="|"/> <property name="names" value="xxx,xx,xxx,xxx,xxx"/> </bean> <!-- Bean s'occupant de mapper les données avec les champs définis par le adherentLineTokenizer --> <bean id="adherentsFieldSetMapper" class="fr.cnamts.stau.batch.adherents.step.importadherents.reader.AdherentsFiledSetMapper"/> </beans>
Mais avec cette configuration, le batch plante dès que je mets deux fichiers dans le répertoire d'entrée. Pourquoi ?
Autre question comment conserver le paramètre d'entrée des fichiers (args[0]) avec l'utilisation de MultiResourceItemReader ?
Merci pour vos pistes et retour.
Cdt,
Partager