Bonjour,

Je suis confronté à un problème étrange avec FlatFileItemWriter. Les lignes écrites ne sont pas triées dans le fichier de sortie.

Je m'explique.

J'ai un SkipListener qui est appelé à chaque fois qu'une ligne invalide est détectée dans le fichier d'entrée (le fichier d'entrée étant lu par un flatFileReader), cette ligne invalide est ensuite écrite dans un fichier de log avec un FlatFileItemWriter.

Le problème c'est que la dernière ligne de mon fichier d'entrée est invalide, et logiquement doit être loguée à la fin de mon fichier de log. Bah non ! cette ligne invalide est écrite arbitrairement dans le fichier de log en fonction du paramètre commit-interval de mon SkipListener.

Voici ma config:
Code : 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
31
32
 
<batch:job id="myJob">
		<batch:listeners>
			<batch:listener ref="appJobExecutionListener" />
		</batch:listeners>
		<batch:step id="step1">
			<batch:tasklet>
				<batch:listeners>
					<batch:listener ref="mySkipListener" />
				</batch:listeners>
				<batch:chunk reader="flatFileReader" writer="itemWriter"
					processor="compositeItemProcessor" commit-interval="${my.commit.interval}"
					skip-limit="${my.skip.limit}" retry-limit="${my.retry.limit}">
					<batch:skippable-exception-classes>
						<batch:include
							class="org.springframework.batch.item.file.FlatFileParseException" />
						<batch:include
							class="org.springframework.batch.item.validator.ValidationException" />
					</batch:skippable-exception-classes>
					<batch:streams>
						<batch:stream ref="errorWriter" />
					</batch:streams>
				</batch:chunk>
			</batch:tasklet>
		</batch:step>
	</batch:job>
 
	<bean id="myLineAggregator" class="com.oberthur.auth.batch.my.MyLineAggregator" />
	<bean id="errorWriter" class="org.springframework.batch.item.file.FlatFileItemWriter">
		<property name="resource" value="${my.error.file.location}" />
		<property name="lineAggregator" ref="myLineAggregator" />
	</bean>
Le seul cas qui fonctionne correctement c'est quand je fixe commit-interval à 1. Pour des questions de performances je peux pas garder cette valeur ...

Merci à vous.