博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用AOP 实现多数据源 切换
阅读量:6978 次
发布时间:2019-06-27

本文共 2493 字,大约阅读时间需要 8 分钟。

多数据源的实现,这里就来个实例吧

1、在 spring 的配置文件中数据源信息

  

2、在 Spring 配置文件中配置 AOP 切面信息,当访问 包 com.bkc.bpmp 及下面的子包中的类的方法时

3、实现 数据源 切面切换的方法,这里假设是根据 locale 来切换数据源的

package com.bkc.bpmp.core.aspectj;import java.lang.reflect.Method;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.reflect.MethodSignature;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.context.i18n.LocaleContextHolder;import com.bkc.bpmp.core.annotation.DbType;import com.bkc.bpmp.core.contants.DbTypeEnum;import com.bkc.bpmp.core.datasource.DatabaseContextHolder;/** * 用于实现 动态数据库切换的AOP 方法类 *  * @author ppnie */public class DataSourceInterceptor{    /**     * 设置数据源为中文 还是 英文     * @param jp     */    public void setdataSourceCnOrEn(JoinPoint jp) {                String curLocale = LocaleContextHolder.getLocale().toString();        System.out.println("==================dataSource_"+curLocale);        if(curLocale.equals("en_US"))        {            DatabaseContextHolder.setCustomerType("dataSource_"+curLocale);        }        else        {            DatabaseContextHolder.setCustomerType("dataSource_zh_CN");        }        logger.info("======="+"dataSource_"+curLocale+"=======");            }}

4、自定义动态数据源的切换方法,主要就是 写一个 AbstractRoutingDataSource 的子类啦

package com.bkc.bpmp.core.datasource;public class DatabaseContextHolder{        private static final ThreadLocal
contextHolder = new ThreadLocal
(); public static void setCustomerType(String customerType) { contextHolder.set(customerType); } public static String getCustomerType() { return contextHolder.get(); } public static void clearCustomerType() { contextHolder.remove(); }}

  

package com.bkc.bpmp.core.datasource;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class DynamicDataSource extends AbstractRoutingDataSource{        @Override    protected Object determineCurrentLookupKey()    {        return DatabaseContextHolder.getCustomerType();    }    }

  

 就这样,达到触发条件的时候,就会去切换数据库啦

 

转载地址:http://bxupl.baihongyu.com/

你可能感兴趣的文章
大叔也说并行和串行`性能提升N倍(N由操作系统位数和cpu核数决定)
查看>>
对ListenSocket 的研究(四)
查看>>
JQuery:JQuery 中的CSS()方法
查看>>
Linux内核跟踪之trace框架分析【转】
查看>>
内存分配器memblock【转】
查看>>
C# BackgroundWorker 详解
查看>>
IOS自定义表格UITableViewCell
查看>>
[Linux] ubuntu 格式化u盘
查看>>
一个COM示例程序
查看>>
通过改进算法来优化程序性能的真实案例(Ransac)
查看>>
head命令
查看>>
软件开发经验总结(一)细节决定软件的成败
查看>>
python tar.gz格式压缩、解压
查看>>
JNDI概述(转载)
查看>>
利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换
查看>>
第 7 章 项目运作
查看>>
PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析
查看>>
.NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator
查看>>
C# 格式串(收藏)
查看>>
浅谈SQL Server中统计对于查询的影响
查看>>