本篇是一个真实案例,来源于与一位技术达人一起共同探讨,解决一个分布式事务中,如何动态管理,
切换数据库,适用于大型互联网,及分库管理系统。网上虽有很多相似问题,但却无可靠,有效之
解决方案。
1. 背景介绍
背景简单介绍一下。一位技术达人(同学)碰到一个棘手问题,听来较为吸引,恰巧手中略空,就一
起研究一下,给自己2个半小时定位
案例来源于一中大型互联网项目,涉及多个分布式数据库(根据业务分拆的数据库,几十个之多MySQL),
使用Spring, MyBatis等流行技术,业务操作需要跨多个数据库,并且整个业务需要事务支持。听起来不错。
目前碰到问题,分布式事务选择开源轻量级Atomikos,动态管理数据源选择Spring的AbstractRoutingDataSource,
一切正常。问题出在当事务于动态切换数据源出现在一个服务中的时候,数据源无法动态切换了。
问题重现
问题描述至此,带着浓浓好奇心,我们开始了神奇之旅。2. 问题重现 听完达人描述好,好奇心突发,
苦于远程协助,只好先现场还原,问题重现了。
我们简单模拟一下了,模拟简单业务场景,在一个方法中需要动态连接两个数据库,并分别插入记录,
提交,整个过程需要事务支持。
定义2个MySQL数据库,Spring+Transaction, JDBC(简单起见)。