【环境参数】
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 }
DynamicDataSource

相关文章: