2013-09-26 2 views
2

Je développe un lot en utilisant le lot de printemps, j'ai deux étapes, une étape1 qui a mis à jour table1 et une autre étape2 mis à jour table2.Gestion des transactions dans le lot de printemps

Je veux que si la deuxième étape2 échoue alors tout le traitement est annulé (rollback). Que devrais-je faire??

J'ai l'échantillon config xml ci-dessous:

<b:step id="Step1" parent="Tache"> 
    <b:tasklet> 
     <b:chunk reader="baseReader" processor="baseProcessor" 
      chunk-completion-policy="completionPolicy" /> 
    </b:tasklet> 
</b:step> 

<b:step id="Step2" parent="Tache"> 
    <b:tasklet> 
     <b:chunk reader="baseReaderEcriture" 
      writer="ecritureWriter" chunk-completion-policy="completionPolicy" /> 
    </b:tasklet> 
</b:step> 

<b:job id="batch" parent="Batch"> 
    <b:step id="step1" parent="Step1" next="step2"/> 
    <b:step id="step2" parent="Step2" /> 
</b:job> 

Merci!

+0

Voir ceci. Cela pourrait donner une idée. http://stackoverflow.com/questions/14369876/spring-batch-and-xa-and-local-transactions –

Répondre

2

Vous ne pouvez pas rollback déjà données validées (après chaque morceau - basé sur vous completition politique - vos données aussi longtemps que les métadonnées de traitement par lots ressort sont commited), de sorte que vous ne pouvez pas rollback automatiquement tous les les données stockées à l'étape 1.
Peut-être que vous pouvez utiliser cette syntaxe:

<b:job id="batch" parent="Batch"> 
    <b:step id="step1" parent="Step1" next="step2"/> 
    <b:step id="step2" parent="Step2"> 
     <next on="ROLLBACK_ALL" to="deleteDataSavedByStep1Step" /> 
     <end on="*" /> 
    </b:step> 
</b:job> 

pour se déplacer à côté d'une étape permet de supprimer les données enregistrées par l'étape 1, mais vous devez savoir que les données que vous devez supprimer dans deleteDataSavedByStep1Step étape.

+0

Vérifiez également http://stackoverflow.com/questions/19031186/spring-batch-one-transaction-over-whole-job –

+1

merci, je suis inspiré par votre réponse. –

0
+0

Merci pour votre réponse, j'utilise une seule base de données (datasource), je ne pense pas avoir besoin de transaction XA? sur le second lien, j'ai déjà vu, mais il ne parle pas de mon cas: rollback étape 1 si l'étape 2 échoue ... –

+0

J'essaie la méthode comment puis-je couvrir step1 et step2 dans le même gestionnaire de transactions !! ? –

+0

lire mon commentaire sur ma réponse; toute la gestion de tx est vraiment une mauvaise idée! –

Questions connexes