Transation Questions - shi-yuan/dynamic-datasource-spring-boot-starter GitHub Wiki

问:使用了事务如@Transational 无法切换数据源?

答: 是的,本组件是基于springAop的方案来进行多数据源的管理和切换的,要想保证多个库的整体事务则需要分布式事务。

问:为什么使用了事务如@Transational就无法切换数据源?

答:开启了事务后,spring事物管理器会保证在事务下整个线程后续拿到的都是同一个connection。

问:事务下无法切换数据源我知道了,那我单库的事务的可以用吗?

答:完全可以的。 只要事务下不切换数据源就OK。

问:我的业务必须要保证事务,还有什么解决办法?

答:seata就是解决此问题,本组件已完成和seata的自动集成。

文档和示例项目如下https://github.com/shi-yuan/dynamic-datasource-spring-boot-starter/wiki/Integration-With-Seata

问:seata又好复杂啊,还要搭建专门环境,还有没有其他方案?

答: 如果数据源只有几个,又不怕复杂,可以放弃本组件。

尝试手动构建数据源结合JTA方案 如 https://www.cnblogs.com/cicada-smile/p/13289306.html。

本文不做详解,如果连接失效或者还是不清楚可以自行搜索 多数据源JTA


不过我们正在探索一些简单的方法:如链式事务和直接代理connection,敬请期待。 欢迎有志之士共同参与。


另外建议不理解或不清楚分布式事务的同学,自行先通过搜索引擎 分布式事务CAP定理 学习相关概念。

程序员小灰的分布式事务 https://blog.csdn.net/bjweimengshu/article/details/79607522

程序员小灰的CAP定理 https://blog.csdn.net/bjweimengshu/article/details/79338859