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 对象定义的每个批处理更新中的参数(使用在初始化时定义的准备好的语句)并对每个执行更新。然后为每个 DataSource 刷新 BatchSqlUpdate。我想知道这是否可以以不同的方式完成:是否可以在不触发提交的情况下将记录增量添加到 BatchSqlUpdate?例如,我希望能够定义三个方法:startBatchUpdate()、addToBatch(int id,String name) 和 flushBatch(),并且在第一个和第三个方法调用之间有一个事务。我尝试使用 Propagation.REQUIRED 属性,但它似乎没有解决问题。有任何想法吗?我希望我的问题很清楚!谢谢

4

1 回答 1

0

What prevents you from extracting those 3 methods and call them from within insertBatchIntoT1?

于 2013-03-30T12:56:31.230 回答