主从数据库SSM框架配置
原理:动态的使用不同的datasource我们就可以动态的使用不同的数据源,问题来了怎样动态的使用不同的datasource呢,----在spring中有一个类叫做AbstractRoutingDataSource,顾名思义叫做路由选择datasource,这个类继承AbstractDataSource,AbstractDataSource实现DataSource,因此可以使用AbstractRoutingDataSource来完成我们的需求。AbstractRoutingDataSource中有一个determineTargetDataSource方法,根据注释是用来决定目标数据源的,determineTargetDataSource方法中通过determineCurrentLookupKey来决定lookupKey,然后使用封装好了的map集合resolvedDataSources通过lookupKey为key值取得datasource,因此这里面最重要的就是determineCurrentLookupKey方法获取key值,这里spring大牛是把这个方法抽象出来让我们实现,这就是我们的目的接下来开始实现
1、第一步编写DynamicDataSource,DynamicDataSourceHolder,通过两个类相结合,动态的设置datasource
public class DynamicDataSource extends AbstractRoutingDataSource{
@Override
protected Object determineCurrentLookupKey() {
// TODO Auto-generated method stub
return DynamicDataSourceHolder.getDbType();
}
}
public class DynamicDataSourceHolder {
private static Logger logger=LoggerFactory.getLogger(DynamicDataSourceHolder.class);
private static ThreadLocal<String> contextHolder=new ThreadLocal<String>();
public static final String DB_MASTER="master";
public static final String DB_SLAVE="slave";
public static String getDbType(){
String db=contextHolder.get();
if(db==null)
db=DB_MASTER;
return db;
}
/**
* 设置线程的DbType