springboot基于Aop实现的动态数据源切换

  • 编写AbstractRoutingDataSource的实现类,HandlerDataSource就是提供给我们动态选择数据源的数据的信息,我们这里编写一个根据当前线程来选择数据源,然后通过AOP拦截特定的注解,设置当前的数据源信息,也可以手动的设置当前的数据源,在编程的类中。
/**
 * @author luhong
 * @version 1.0
 * @Description 获取动态数据源
 * @date 10/22/2018
 * @updateby
 * @updatedate
 * @since 1.0
 */
public class DynamicDataSource extends AbstractRoutingDataSource {

    @Override
    public Object determineCurrentLookupKey() {
        return DynamicDataSourceHolder.getDataSourceKey();
    }
}
  • 编写DynamicDataSourceHolder.class

/**
 * @author luhong
 * @version 1.0
 * @Description
 * @date 10/22/2018
 * @updateby
 * @updatedate
 * @since 1.0
 */
public class DynamicDataSourceHolder {

    //写库对应的数据源key
    private static final String READ = "read";

    //读库对应的数据源key
    private static final String WRITE = "write";

    //使用ThreadLocal记录当前线程的数据源key
    private static final ThreadLocal<String> holder = new ThreadLocal<String>();

     /**
     * @author: luhong
     * @Description 管理所有的数据源id; 主要是为了判断数据源是否存在;
     * @Date 5:08 PM 10/27/2018
     * @Param
     * @return:
     */
    public static List<String> dataSourceIds = new ArrayList<String>();

    /**
     * 设置数据源key
     * @param key
     */
    public static void setDataSourceKey(String key) {
        holder.set(key);
    }

    /**
     * 获取数据源key
     * @return
     */
    public static String getDataSourceKey() {
        return holder.get();
    }

    /**
     * 标记写库
     */
    public static void markRead(){
        setDataSourceKey(READ);
    }

    /**
     * 标记读库
     */
    public static void markWrite(){
        setDataSour
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值