如何将弹簧的动态数据源进行读写分离

  介绍

这篇文章给大家介绍如何将弹簧的动态数据源进行读写分离,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

一、创建基于ThreadLocal的动态数据源容器,保证数据源的线程安全性

package  com.bounter.mybatis.extension;/* *   ,*基于ThreadLocal实现的动态数据源容器,保证DynamicDataSource的线程安全性   ,* @author 西蒙   ,*   ,*/public  class  DynamicDataSourceHolder  {      ,private  static  final  ThreadLocal< String>, dataSourceHolder =, new  ThreadLocal<在();      ,public  static  void  setDataSource (String  dataSourceKey), {   ,dataSourceHolder.set (dataSourceKey);   ,}      ,public  static  String  getDataSource (), {   ,return  dataSourceHolder.get ();   ,}      ,public  static  void  clearDataSource (), {   ,dataSourceHolder.remove ();   ,}   }

二、定义弹簧动态数据源扩展类,用来实现主人,奴隶数据源动态切换

package  com.bounter.mybatis.extension;      import  org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;/* *   ,*自定义的Spring 动态数据源扩展类,用来实现主人,奴隶数据源动态切换   ,* @author 西蒙   ,*   ,*/public  class  DynamicDataSource  extends  AbstractRoutingDataSource  {      ,@Override   ,protected  Object  determineCurrentLookupKey (), {   ,//使用DynamicDataSourceHolder保证线程安全   ,return  DynamicDataSourceHolder.getDataSource ();   ,}      }

三,配置主人,奴隶数据源

1。db。属性配置主、从数据信息

#, Master  DB   db.master.url=jdbc: mysql://192.168.168.110:3306/邦德? useUnicode=true& characterEncoding=utf8& zeroDateTimeBehavior=convertToNull& allowMultiQueries=true& serverTimezone=PRC& useSSL=false   db.master.username=邦德   #,AES 加密,Base64 编码   db.master.password=ZNhnEjauk3pecZxxS84ofA==#,Slave  DB   db.slave.url=jdbc: mysql://192.168.168.111:3306/数据库? useUnicode=true& characterEncoding=utf8& zeroDateTimeBehavior=convertToNull& allowMultiQueries=true& serverTimezone=PRC& useSSL=false   db.slave.username=邦德   #,AES 加密,Base64 编码   db.slave.password=jFYmt2f57RHhzItYDhWiSA==

2。春天配置文件配置主、从连接池,动态数据源

& lt; !——,掌握数据源,——比;   & lt; bean  id=癿asterDataSource",类=癱om.alibaba.druid.pool.DruidDataSource"   init方法=癷nit"大敌;销毁方法=癱lose"比;   ,& lt; !——,基本属性,url,用户,password ——比;   ,& lt; property  name=皍rl",价值=https://www.yisu.com/zixun/" $ {db.master.url} "/>   <属性名="用户名" value=" $ {db.master。用户名}"/>   <属性名==" $ {db.master“密码”价值。密码}"/>      <属性名=" initialSize " value=" 20 "/>   <属性名=" minIdle " value=" 1 "/>   <属性名=" maxActive " value=" 40 "/>      <属性名=" maxWait " value=" 60000 "/>      <属性名=" timeBetweenEvictionRunsMillis " value=" 60000 "/>      <属性名=" minEvictableIdleTimeMillis " value=" 300000 "/>   <属性名=" validationQuery " value="选择“x”"/>   <属性名=" testWhileIdle " value=" true "/>   <属性名=" testOnBorrow " value=" false "/>   <属性名=" testOnReturn " value=" false "/>      <属性名="过滤器" value="统计"/>               <属性名="用户名" value=" $ {db.slave。用户名}"/>   <属性名==" $ {db.slave“密码”价值。密码}"/>      <属性名=" initialSize " value=" 20 "/>   <属性名=" minIdle " value=" 1 "/>   <属性名=" maxActive " value=" 40 "/>      

如何将弹簧的动态数据源进行读写分离