我正在使用spring批处理开发一个批处理,我有两个步骤,一个更新table1的step1和另一个step2更新了table2。
我想如果第二步2失败则所有处理都被取消(回滚)。我该怎么办?
我有以下示例xml配置:
<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>
谢谢!
答案 0 :(得分:3)
您无法回滚已提交的数据(在每个块之后 - 基于您的completition策略 - 只要提交了Spring-batch元数据,您的数据就会被提交),因此您无法自动回滚步骤1中存储的所有数据。 /> 也许你可以使用这种语法:
<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>
要移动到用于删除步骤1中保存的数据的步骤旁边,但您必须知道必须在deleteDataSavedByStep1Step
步骤中删除哪些数据。
答案 1 :(得分:0)
看到这个。这可能会给出一个想法。 Spring batch and XA and local transactions
https://blog.codecentric.de/en/2012/03/transactions-in-spring-batch-part-1-the-basics/
答案 2 :(得分:0)
嗨,我希望它可以帮助别人。如果这些步骤成功,只需要为每个检查任务创建一个步骤,然后启动最后一步,将您的数据保存到数据库中。