嘎里三分熟
  • 首页
  • JMusic
  • TSBay
  • 常用工具
  • About Me
  • 留言板
一行代码一世浮生
  1. 首页
  2. Java web
  3. SpringBoot
  4. 正文

Java动态切换数据源(AOP)

2017年09月11日 2302点热度 8人点赞 0条评论

一、对比

        通过中间层来管理数据源,常用的有 mycat 等,但有一个大缺陷,就是性能的损耗,即本身直接请求数据库的事儿,却要经过中间层来进行一次分配的操作,但是,通用性比较高。

        而使用客户端模式来管理数据源,直连数据库,就没有那一部分的性能损耗,但是不够通用,而且如果业务足够复杂时,对数据库的连接处理也并不 easy。

二、实现 ①自定义数据源

        源码地址

       目录结构概览:

            dynamic-datasource-aop(11).png

        采用 springboot 来实现本操作,所以下文见到的都是注解的形式。

        ① 配置两个数据源

         

            

        ② 使用 ThreadLocal 保存数据源,目的是保证当前数据源在当前线程中不被其它线程修改

            dynamic-datasource-aop(03).png

        ③ 写个动态数据源的实现,需要继承 Spring 给我们提供的 AbstractRoutingDataSource 抽象类

            其实就是个路由。

            dynamic-datasource-aop(04).png

        ④ 完成动态数据源的对象的申明 (bean)

            dynamic-datasource-aop(05).png

三、实现 ②自定义AOP

        申明一个 AOP 切面,我们的做法是在 repository 层进行数据源的切换,完成后移除数据源的名称。dynamic-datasource-aop(06).png

四、实现 ③动态切换

        ① 自定义注解,该注解使用目标是 dao 层方法

            dynamic-datasource-aop(07).png

        ② dao 层方法上加注解,没有加的就使用默认的 数据库连接

        dynamic-datasource-aop(08).png

五、测试效果

        ① 自定义实体类

            dynamic-datasource-aop(09).png

        ② 写测试类,查十次,奇数次查默认数据库,否则查 test2 数据库

        ③ 结果,如下图,在查 test2 数据库的时候,进行了连接处的初始化动作

dynamic-datasource-aop(10).png

六、总结

        本文采用的是 Spring 中的 AbstractRoutingDataSource 和 AOP 来实现动态数据源的切换,如此简单的操作可以满足大部分基础的切换动作。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: AOP datasource SpringBoot
最后更新:2017年09月11日

GoldenJet

爱折腾技术的90后漫威小死忠程序员一枚

点赞
< 上一篇
下一篇 >

文章评论

取消回复

通过电子邮件订阅博客

分类目录
  • BootStrap (2)
  • Bug集中营 (6)
  • Java web (3)
  • JavaScript (7)
  • Java基础 (17)
  • Java工具 (5)
  • Linux (3)
  • Python (3)
  • SpringBoot (14)
  • Spring基础 (8)
  • thymeleaf (1)
  • 娱乐 (3)
  • 小谈 (2)
  • 常用工具 (7)
  • 技术分析集 (5)
  • 技能 (10)
  • 源码 (4)
  • 科普类 (1)
  • 算法 (9)
  • 踩坑记 (5)
文章归档
  • 2020年11月 (1)
  • 2020年7月 (1)
  • 2020年4月 (2)
  • 2020年3月 (1)
  • 2020年1月 (1)
  • 2019年11月 (1)
  • 2019年10月 (1)
  • 2019年9月 (1)
  • 2019年8月 (1)
  • 2019年7月 (2)
  • 2019年5月 (2)
  • 2019年4月 (2)
  • 2019年3月 (3)
  • 2019年2月 (2)
  • 2019年1月 (2)
  • 2018年12月 (2)
  • 2018年11月 (3)
  • 2018年10月 (3)
  • 2018年9月 (2)
  • 2018年8月 (3)
  • 2018年7月 (2)
  • 2018年5月 (1)
  • 2018年4月 (3)
  • 2018年3月 (2)
  • 2018年2月 (3)
  • 2018年1月 (5)
  • 2017年12月 (2)
  • 2017年11月 (3)
  • 2017年10月 (1)
  • 2017年9月 (1)
  • 2017年8月 (1)
  • 2017年7月 (7)
  • 2017年6月 (5)
  • 2017年5月 (1)
  • 2017年4月 (2)
  • 2017年3月 (4)
  • 2017年2月 (2)
小伙伴友链
  • 前端驿站

COPYRIGHT © 2017-2020 嘎里三分熟. ALL RIGHTS RESERVED.

浙ICP备17005575号-1

浙公网安备 33010802009043号