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