一、概述
1、业务背景
对老系统进行重构合并,导致新系统需要同时对3个数据库进行管理。由于出现跨库业务,需要实现分布式事务。
2、开发环境
spring框架版本 4.3.10.RELEASE
持久层为结合mybatis写的领域模型,如
每一个entity对应数据库的一张表,@DataSource注解(自定义)了对应数据源的key值。所以一个业务中可能存在数据源的切换。
事务采用注解@Transaction驱动。
二、spring对多数据源的支持
spring框架通过抽象类AbstractRoutingDataSource来实现多数据源支持。
AbstractRoutingDataSource中有一个抽象方法determineCurrentLookupKey()。子类实现该方法即可。
举例如下:
packagecom.cmcc.cq.xx.common.mybatis;importorg.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class DynamicDataSource extendsAbstractRoutingDataSource {
@OverrideprotectedObject determineCurrentLookupKey() {returngetDataSourceType();
}private stati