Spring Boot数据访问之动态数据源切换之使用注解式AOP优化
在Spring Boot数据访问之多数据源配置及数据源动态切换 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中详述了如何配置多数据源及多数据源之间的动态切换。但是需要读数据库的地方,就需要加上一大段RoutingDataSourceContext ctx = ...代码,使用起来十分不便。有没有方法可以简化呢?当然可以啦。
回顾一下声明式事务Spring AOP应用之一:声明式事务 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中可以利用@Transactional() 注解,放在某个Java方法上,这个方法就动具有了事务的功能。我们也可以编写类似的@RoutingWith("slaveDataSource")注解,放到某个方法上,这个方法内部就自动选择了对应的数据源。
参考Spring AOP基础概念及自定义注解拦截等方式初体验 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中自定义注解拦截方式,优化动态数据源的切换。具体操作如下:
1)添加坐标

2)编写自定义拦截注解

3)Aspect类

4)测试类:

5)Service类:

测试结果:


补充注意:
在上述步骤的第四步中将数据源选择注释后并没有直接在测试类中直接使用@RoutingWith注解,而是在第五步的Service服务中添加。如果不按这个添加使用注解加AOP方式进行动态数据源路由是失败的(亲测,切面类无效)。
为什么呢?这与动态选择数据源的实现原理有关:现在项目的结构设计基本上是基于MVC的,那么数据库的操作集中在dao层完成,主要业务逻辑在service层处理,controller层处理请求。假设在执行dao层代码之前能够将数据源(DataSource)换成我们想要执行操作的数据源,那么这个问题就解决了。

对于使用Mybatis进行数据持久化操作,在SessionFactory实例化之前就应将数据源选择好。在示例的案例中,在测试类中选择数据源时,SessionFactory已经进行了实例化的操作(即数据源已经作为参数注入到sesionFactory对象)。
Spring Boot数据访问之动态数据源切换之使用注解式AOP优化的更多相关文章
- Spring Boot数据访问之多数据源配置及数据源动态切换
如果一个数据库数据量过大,考虑到分库分表和读写分离需要动态的切换到相应的数据库进行相关操作,这样就会有多个数据源.对于一个数据源的配置在Spring Boot数据访问之数据源自动配置 - 池塘里洗澡的 ...
- 06.深入浅出 Spring Boot - 数据访问之Druid
代码下载:https://github.com/Jackson0714/study-spring-boot.git 一.Druid是什么? 1.Druid是数据库连接池,功能.性能.扩展性方面都算不错 ...
- 07.深入浅出 Spring Boot - 数据访问之Mybatis(附代码下载)
MyBatis 在Spring Boot应用非常广,非常强大的一个半自动的ORM框架. 代码下载:https://github.com/Jackson0714/study-spring-boot.gi ...
- Spring Boot数据访问之整合Mybatis
在Mybatis整合Spring - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中谈到了Spring和Mybatis整合需要整合的点在哪些方面,需要将Mybatis中数据库连接池等相关对 ...
- Spring Boot数据访问之Druid连接池的配置
在Spring Boot数据访问之数据源自动配置 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中数据源连接池方式缺省(type)情况下默认使用HikariCP,那不缺省如何配置呢?我们 ...
- Spring Boot:实现MyBatis动态数据源
综合概述 在很多具体应用场景中,我们需要用到动态数据源的情况,比如多租户的场景,系统登录时需要根据用户信息切换到用户对应的数据库.又比如业务A要访问A数据库,业务B要访问B数据库等,都可以使用动态数据 ...
- Spring Boot + Mybatis多数据源和动态数据源配置
文章转自 https://blog.csdn.net/neosmith/article/details/61202084 网上的文章基本上都是只有多数据源或只有动态数据源,而最近的项目需要同时使用两种 ...
- Spring Boot数据访问之数据源自动配置
Spring Boot提供自动配置的数据访问,首先体验下,Spring Boot使用2.5.5版本: 1)导入坐标: 2.5.25版本支持8.0.26mysql数据库驱动.spring-boot-st ...
- Spring Boot 数据访问集成 MyBatis 与事物配置
对于软件系统而言,持久化数据到数据库是至关重要的一部分.在 Java 领域,有很多的实现了数据持久化层的工具和框架(ORM).ORM 框架的本质是简化编程中操作数据库的繁琐性,比如可以根据对象生成 S ...
随机推荐
- HIVE理论学习笔记
概述 参加了新的公司新的工作新的环境之后,本人必须学习更多的知识,所以稳固之前的知识和学习新的知识是重中之重,新的公司把hadoop大部分的组件都进行了架构源码深度改造,所以使用过程确实遇到一些麻烦, ...
- weblogic 未授权命令执行漏洞(CVE-2020-14882,CVE-2020-14883)复现
漏洞描述 2020年10月29日,360CERT监测发现 Weblogic ConSole HTTP 协议代码执行漏洞,该漏洞编号为 CVE-2020-14882,CVE-2020-14883 ,漏洞 ...
- Genymotion安装apk问题,不能部署Genymotion-ARM-Translation_v1.zip
把Genymotion-ARM-Translation_v1.zip拖进去提示 Files successfully copied to: /sdcard/Download 但还是不能安装apk 解决 ...
- leetcode 921. 使括号有效的最少添加
问题描述 给定一个由 '(' 和 ')' 括号组成的字符串 S,我们需要添加最少的括号( '(' 或是 ')',可以在任何位置),以使得到的括号字符串有效. 从形式上讲,只有满足下面几点之一,括号字符 ...
- 基础概念(3):怎么写一个c程序?
总结卡片: 遵循c语言的规则,即可写出c程序.规则下有两个重要概念:函数与变量.就好像游戏中的打仗,要考虑怎么打,谁来打."怎么打"就是流程,把流程封装起来就是函数,流程也叫算法. ...
- WebGPU | 相关知识概述
首先看下WebGPU的目标: 同时支持实时屏幕渲染和离屏渲染. 使通用计算能够在 GPU 上高效执行. 支持针对各种原生 GPU API 的实现:Microsoft 的 D3D12.Apple 的 M ...
- java继承成员变量特点
1 /* 2 * 在子父类中,成员的特点体现. 3 * 1,成员变量. 4 * 2,成员函数. 5 * 3,构造函数. 6 */ 7 8 //1, 成员变量. 9 /* 10 * 当本类的成员和局部变 ...
- python开发之函数
转:https://www.tuicool.com/wx/vEVrqeR 06 python开发之函数 博客园精华区12-12 20:56 06 python开发之函数 目录 6.2 调用函数与函数返 ...
- TCP长连接实践与挑战
点这里立即申请 本文介绍了tcp长连接在实际工程中的实践过程,并总结了tcp连接保活遇到的挑战以及对应的解决方案. 作者:字节跳动终端技术 --- 陈圣坤 概述 众所周知,作为传输层通信协议,TCP是 ...
- python基础详解
python基础部分 python基础一 python基础二 Python最详细,最深入的代码块小数据池剖析 深浅copy python文件操作 python函数部分 python函数初识 pytho ...