1.mysql读写分离,我们需要在数据源配置文件中配置多个数据源
2.自定义动态切换数据源DynamicDataSource,继承AbstractRoutingDataSource,该类有实现了DataSource接口
然后我们打开DynamicDataSource继承的AbstractRoutingDataSource
如上图所示我们在图1中设置了targetDataSources目标数据源和defaultTargetDataSource默认数据源
如上图所示可以看到,拿到targetDataSources,然后遍历targetDataSources放入到resolvedDataSources(在图2中也标识出来了),如果我们设置了默认的数据源,赋值给resolvedDefaultDataSource
该类中两个getConnection方法都调用了determineTargetDataSource()方法,接下里我们看看determineTargetDataSource()
从上图我们可以看出,获取connection之前我们首先要获取key,然后通过key找到我们对应的数据源对象,如果找到不数据源对象,那么就使用默认的数据源。
重写该方法,然后返回数据源对应的key,在图1中定义的key有
我们可以定义一个切面,用来处理业务层的方法,如果不是get、find、select、search等开头的我们应该把master作为key可以设置在ThreadLocal中,然后在连接数据库的时候,会走我们自定义DynamicDataSource中重写的determineCurrentLookupKey()方法,该方法从ThreadLocal中获取在切面中放入的key,通过key就可以找到我们需要的数据源对象了。
就可以实现的读写分离操作了。