ssm框架下的多数据源主从数据库配置

本文介绍了在SSM(Spring、SpringMVC、MyBatis)框架下如何实现多数据源配置,包括主从数据库的切换。通过自定义DynamicDataSource类继承AbstractRoutingDataSource,利用ThreadLocal进行数据源的动态选择。同时,创建DynamicDataSourceInterceptor拦截器,根据不同的SqlCommandType选择不同的数据源。最后,在Spring配置文件中配置数据源和拦截器,完成主从数据库的动态切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主从数据库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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值