Spring + Atomikos批量插入/更新

时间:2013-01-28 21:13:43

标签: spring batch-processing jta atomikos

我设法将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属性,但它似乎没有做到这一点。有任何想法吗? 我希望我的问题清楚! 感谢

1 个答案:

答案 0 :(得分:0)

什么阻止你提取这3个方法并从insertBatchIntoT1中调用它们?