3

私は春のバッチを使用してバッチを開発しています.2つのステップがあります。テーブル1を更新したステップ1とテーブル2を更新した別のステップ2です。

2 番目の 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 メタデータがコミットされている限り、データ)。
おそらく、次の構文を使用できます。

<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 に答える