总体思路如下:
-
使用AOP
使用AOP代理对service方法拦截。可以定义一个切面(aspect),包含切点(pointcut)和增强(advice)。 -
数据源信息值为多少?放在那里?
数据源的信息根据访问的service的名字得出,仅有查询使用slave数据源,否则使用master数据源。数据源的信息设置在ThreadLocal变量中。 -
数据源如何路由
实现AbstractRoutingDataSource
中determineCurrentLookupKey
进行数据源选择。
具体细节这篇文章写得很清楚了,就不再赘述了。
当然还需要对数据库进行MySQL主从复制(BinaryLog)