0

spring + atomikos を構成して、複数のデータベース間でグローバル トランザクションを実行することができました。たとえば、レコードをトランザクションで更新または挿入します。@Transactional アノテーションを SqlUpdate クラスまたは BatchSqlUpdate クラスと一緒に使用して、データベース トランザクションを実行しています。コード例を次に示します。

@Transactional
public void insertBatchIntoT1(List<Integer> ids, List<String> names) {
    Map<String, Object> params = new HashMap<>();
    for (int i = 0; i < ids.size(); i++) {
        int id = ids.get(i);
        String name = names.get(i);
        params.put("id", id);
        params.put("name", name);
        for (BatchSqlUpdate u : insertIntoT1)
            u.updateByNamedParam(params);
    }
    for (BatchSqlUpdate u : insertIntoT1)
        u.flush();
}

このメソッドは、ID と名前のリスト (カスタム POJO のリストの場合もあります) を受け取り、リスト内の各項目に対して、各 DataSource オブジェクトに対して定義された各バッチ更新でパラメーターを設定します (初期化時に定義された準備済みステートメントを使用)。それぞれの更新を実行します。次に、BatchSqlUpdate が各 DataSource に対してフラッシュされます。これを別の方法で行うことができるかどうか疑問に思っていました.コミットをトリガーせずに BatchSqlUpdate にレコードを段階的に追加することは可能ですか? たとえば、startBatchUpdate()、addToBatch(int id,String name)、flushBatch() の 3 つのメソッドを定義し、最初と 3 番目のメソッド呼び出しの間に単一のトランザクションを持たせたいと考えています。Propagation.REQUIRED 属性を使用してみましたが、うまくいかないようです。何か案は?私の質問が明確だったことを願っています!ありがとう

4

1 に答える 1

0

これら 3 つのメソッドを抽出して、insertBatchIntoT1 内から呼び出すことができない理由は何ですか?

于 2013-03-30T12:56:31.230 に答える