Spring for Dynamic Datasource

来源:互联网 发布:qsfp28光模块端口 编辑:程序博客网 时间:2024/06/08 15:15

首先配置多个数据源:

DataSource d1;DataSource d2;DataSource d3;Map<String, DataSource> dSources;dSources.put(DBContextHolder.T1, d1);dSources.put(DBContextHolder.T2, d2);dSources.put(DBContextHolder.T3, d3);

写一个DynamicDataSource类继承AbstractRoutingDataSource,并实现determineCurrentLookupKey方法

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;  public class DynamicDataSource extends AbstractRoutingDataSource {      @Override      protected Object determineCurrentLookupKey() {          return DBContextHolder.getDBTag();      }  }


用ThreadLocal做一个Holder

public class DBContextHolder {      public static final String T1 = "1";      public static final String T2 = "2";    public static final String T3 = "3";     private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();    public static void setDBTag(String tag) {         contextHolder.set(tag);     }     public static String getDBTag() {         return contextHolder.get();     }}


新建自己的数据源

DynamicDataSource d;d.setTargetDataSources(map);//第一步声明的map

准备好了

DBContextHolder.setDBTag(DBContextHolder.T1)
这样数据源就被切换了.

关联文章:

 

基于Mybatis的分库实践

点击打开链接


原创粉丝点击