3

我正在使用spring批处理开发一个批处理,我有两个步骤,一个更新table1的step1和另一个更新table2的step2。

我想如果第二步失败,那么所有的处理都被取消(回滚)。我应该怎么办??

我有下面的示例 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>

谢谢!

4

3 回答 3

4

您无法回滚已提交的数据(在每个块之后 - 基于您的完成策略 - 只要提交了 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步骤中必须删除哪些数据。

于 2013-09-26T15:18:45.303 回答
0

看到这个。这可能会给出一个想法。Spring 批处理和 XA 以及本地事务

https://blog.codecentric.de/en/2012/03/transactions-in-spring-batch-part-1-the-basics/

于 2013-09-26T14:45:40.660 回答
0

嗨,我希望它可以帮助别人。如果这些步骤成功,只需为每个检查任务创建一个步骤,然后启动最后一步,将您的数据保存到数据库。

于 2021-07-13T14:15:27.343 回答