资源
Git地址:https://code.csdn.net/luo4105/study_multipledatasources
AbstractRoutingDataSource亦可用来做读写分离。读写分离实际上也算多数据源,有读数据源、写数据源,通过一定规则使写用写数据源,读用读数据源。
读写分离介绍
读写分离常用的策略有两种,一种是使用MySql中间件,如mysql-proxy之类。这种对代码没有侵入、没有影响,运维就能完成、维护;第二种是在应用层解决,这里介绍的就是应用层使用spring的AbstractRoutingDataSource来完成项目的读写分离。
现在比较常使用的是使用MySql中间件,这样职责分开,也便于维护。但在一些创业公司人手不足,分工不能明确,这样就可以选择第二种,在应用层解决。
原理
我们通过service方法名头来判断是读还是写。比如”get,select”就是读操作,”update,delete,save,insert”就是写操作。
将读写操作关键字和方法名头的对应关系保存起来,如:{“read”,[“get”,” select”]}。这是一个配置项,可以用static Map<String,String[]>存放。
还需获得方法名,这个可以用切面获得,存放到ThreadLocal。
实现
实现步骤为
1. 配置读写数据源
2. 实现AbstractRoutingDataSource类
3. 注册实现类
4. 编写AOP
配置数据源
<bean