这篇文章的亮点是百度找到的关于集成druid多数据源的文章大部分都是一主一从,还有没有介绍如何扩展更多的数据源。经过几天的摸索,终于想出了一个可用的版本。目前有以下功能1.集成druid,实现主双从架构2.默认master对slave进行读写3.可以通过指定读取主库还是从库代码中的注解。这篇文章更多的是对现有网上文章的补充,重点描述自己探索过程中的难点,具体的知识点之类的。请参考互联网上的其他文本。源码先贴代码地址:链接两个关键问题在摸索的过程中,有两个问题比较困惑1、数据库是怎么连接的?2、如何切换数据库源?为了不影响阅读,配置文件和pom依赖放在文末1、数据库是怎么连接的?我通过配置文件配置了druid。其实master、slave1、slave2这三个字段并不是druid的配置项,而是我自己定义的。您可以给它们起其他名称,例如db1、db2等。我们需要写一个配置类来引入我们配置文件的数据库。@ConfigurationProperties注解的参数是我们配置文件中数据库配置的前缀,bean注解中的init表示在项目启动的时候要初始化连接(去掉init会导致数据库不会自动启动)项目启动后连接,直到第一个sql请求才会连接)2、数据库源如何切换?还是跟配置类有关。在上一个问题中,我们创建了三个数据源。接下来,我们需要创建一个映射并将其绑定到数据源,然后将其作为构造函数参数传递给继承AbstractRoutingDataSource的类。这个类有一个determineCurrentLookupKey方法。在这个方法中,我们在上一步中设置的key可以用来执行使用相应数据源的SQL。因此,我们需要在SQL执行前获取到当前要执行的key,一般是通过ThreadLocal获取。我们需要在当前线程使用某个库的时候调用setDataSourceType方法设置key。记得在使用后清理变量值,以防止内存泄漏。至此我们基本解决了druid连接池的引入和数据源的切换问题。优化1、数据源切换方法调用代码中的方法进行切换,不够优雅,代码可读性不高。我们可以通过自定义注解实现优雅的切换数据源。代码中我们只需要在具体的方法上加上@Master或者@Slave注解就可以实现数据源的切换2.默认master从read中写入和读取。我通过mybatisSQL拦截所有的查询语句,并将其数据源设置为从库。完整内容请查看源码:链接
