【环境参数】
1、开发框架:Spring + SpringMVC + MyBatis
2、数据库A的URL:jdbc.url=jdbc:mysql://172.16.17.164:3306/ test?characterEncoding=UTF-8&useUnicode=TRUE&autoReconnect=true&failOverReadOnly=false
3、数据库B的URL:bakdb.jdbc.url=jdbc:mysql://172.16.17.68:3306/bakDB?characterEncoding=UTF-8&useUnicode=TRUE&autoReconnect=true&failOverReadOnly=false
【需求描述】
(1)当用户调用X方法“之前”,系统会首先切换当前数据源为A数据源(bakDb数据库),之后再去调用方法X。
(2)当用户调用Y方法“之前”,系统会首先切换当前的数据源为B数据源(testDb数据库),之后再去调用方法Y。
(3)X方法和Y方法所在的包名
X方法:该方法位于com.zjrodger.bakdata.service包下其子包下。
Y方法:该方法位于com.zjrodger.datatobank.service或者com.zjrodger.zxtobank.service包及其子包下。
【具体步骤】
1、编写动态数据源相关代码。
(1) 编写DynamicDataSource类。
DynamicDataSource的主要作用是以Map<Object, Object>的形式,来存储多个数据源。
因为该类继承了父类AbstractRoutingDataSource,在父类中,多数据源的实例是被存放在一个名为“targetDataSource”的Map类型的成员变量中。
1 import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; 2 3 public class DynamicDataSource extends AbstractRoutingDataSource { 4 5 @Override 6 protected Object determineCurrentLookupKey() { 7 return DatabaseContextHolder.getDbType(); 8 } 9 }