jfinal配置多个数据源时,如何保证事务

@JFinal 波总,请教一下,我在一个action中需要同时处理两个数据源的数据,然后同时成功才提交,有一个失败就都回滚,有什么方式可以实现吗?

Db.tx(() -> {
  Db.use("ds1").update("update t1 set f1 = ?", 123);
  Db.use("ds2").update("update t2 set f2 = ?", 456);
  return true;
});

比如上面代码,如果只有 ds2 成功了,ds1失败了(默认主数据源是ds1),是不是ds2不能回滚了。

评论区

JFinal

2024-11-07 17:09

多数据源事务是 "分布式事务" 的范畴, jfinal 并不支持

"分布式事务" 很麻烦,而且性能不高,如果一定要支持的话,找一找中间件,例如 sharding jdbc , 搜索一下,或者问一下 chat gpt "sharding jdbc 分布式事务"。

专业的人干专业的事,分布式事务交给这些成熟的中间件去解决。 这类组件对开发是透明的,配置好之后,给 jfinal 的仍然是数据源,jfinal 这边代码不变

大白熊

2024-11-07 17:18

@JFinal 明白了,谢谢

JFinal

2024-11-10 10:41

@杜福忠 同学的方案来了: https://jfinal.com/share/2764

热门反馈

扫码入社