https://mp.weixin.qq.com/s?__biz=MzI4Njc5NjM1NQ==&mid=2247488030&idx=1&sn=68bd1010818534bac95ff7d0526d8886&chksm=ebd62d32dca1a424d59941614f31e9a49f6604b7c805407ac47a061153a6048097cba1e8f259&scene=21#wechat_redirect

1. 引言

读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做。因此,一般来讲,读写分离有两种实现方式。第一种是依靠中间件(比如:MyCat),也就是说应用程序连接到中间件,中间件帮我们做SQL分离;第二种是应用程序自己去做分离。这里我们选择程序自己来做,主要是利用Spring提供的路由数据源,以及AOP。

然而,应用程序层面去做读写分离最大的弱点(不足之处)在于无法动态增加数据库节点,因为数据源配置都是写在配置中的,新增数据库意味着新加一个数据源,必然改配置,并重启应用。当然,好处就是相对简单。
读写分离 - 图1

2. AbstractRoutingDataSource

基于特定的查找key路由到特定的数据源。它内部维护了一组目标数据源,并且做了路由key与目标数据源之间的映射,提供基于key查找数据源的方法。
读写分离 - 图2

3. 实践

https://www.cnblogs.com/cjsblog/p/9706370.html