Bonjour,
J'utilise Spring Batch pour lire à partir d'un fichier, puis pour écrire dans une base de données.
Voici un exemple de structure de fichier (non réel):
Les deux premières lignes sont des lignes de données, et la dernière est pour le contrôle.98165165132161JeanDupont065400015151
01565466516597JackLor 874854984984
cccccc293000000000000000000000000000
cccccc signifie ligne de commande
2 le nombre de lignes dans le fichier
93, la somme des valeurs après le nom (indice 24): 06 87
Après avoir lu toutes les lignes du fichier, on doit lire la ligne de contrôle et faire la vérification. Si OK, on commit sinon on arrête (BATCH FAIL).
Le problème est que si j'ai un commit-interval de 100 et j'ai 1000 ligne dans le fichier. Le job va d'abord lire les 100 premières lignes et il ne trouvera pas la ligne de contrôle. Donc, le job va s'arrêter.
Si je garde la vérification à la fin, le job va faire un commit toutes les 100 lignes, si le contrôle n'est pas OK, on ne peut pas faire de roll back.
J'utilise :Config:ItemReader: org.springframework.batch.item.file.FlatFileItemReader
lineMapper: org.springframework.batch.item.file.mapping.DefaultLineMapper
lineTokenizer: org.springframework.batch.item.file.transform.FixedLengthTokenizer
itemWriter: org.springframework.batch.item.database.JdbcBatchItemWriterEst-il possible de désactiver le commit-interval (pas bon), ou bien de lire par bloc, mais commiter à la fin (si OK) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <batch:step id="step1"> <batch:tasklet transaction-manager="transactionManager" > <batch:chunk reader="myItemReader" processor="myProcessor" writer="myItemWriter" commit-interval="100"> </batch:chunk> </batch:tasklet> </batch:step>
Je vous remercie à l'avance.
Partager