当前位置:首页 > 科技  > 软件

多数据源管理:掌握@DS注解的威力

来源: 责编: 时间:2023-10-31 10:26:08 416观看
导读大家在日常后端开发过程,不可避免的会接触到需要用到配置多个数据源的场景,在这里,小编介绍一种简单方便的,只需要简单的配置和一个@DS注解就能实现动态数据源的方式,这种动态数据源底层原理是基于Mybatis-plus来实现的。1

大家在日常后端开发过程,不可避免的会接触到需要用到配置多个数据源的场景,在这里,小编介绍一种简单方便的,只需要简单的配置和一个@DS注解就能实现动态数据源的方式,这种动态数据源底层原理是基于Mybatis-plus来实现的。oms28资讯网——每日最新资讯28at.com

1、配置方式

首先是pom.xmloms28资讯网——每日最新资讯28at.com

<dependency>        <groupId>com.baomidou</groupId>        <artifactId>dynamic-datasource-spring-boot-starter</artifactId>        <version>3.4.1</version></dependency>

随后配上多数据源,我们的项目中分别配置了Mysql和Doris两种数据库oms28资讯网——每日最新资讯28at.com

spring:      datasource:            druid:                  localdb:                        url: xxx                        username: xxx                     driver-class-name: com.mysql.jdbc.Driver                        type: com.alibaba.druid.pool.DruidDataSource                  doris:                       url: xxx                        username: xxx                driver-class-name: com.mysql.jdbc.Driver                        type: com.alibaba.druid.pool.DruidDataSource

最后需要使用哪个数据库,在对应的方法上加上对应的@DS(“数据库名”)注解就可以了,在类上加@DS(“数据库名”),那么整个类下的所有方法都会使用到这个数据源,实现方式是不是非常简单。oms28资讯网——每日最新资讯28at.com

@Service@DS("localdb")public class testServiceImpl extends BaseServiceImpl<testMapper, testBean> implements testService {    public void save(String arg1) {       //TODO    }        public void find(String arg2) {       //TODO    }}

1、底层实现原理

底层实现核心类是
com.baomidou.dynamic.datasource.DynamicRoutingDataSource,继承自AbstractDataSource
oms28资讯网——每日最新资讯28at.com

oms28资讯网——每日最新资讯28at.com

oms28资讯网——每日最新资讯28at.com

项目在初始化的时候会调用DynamicRoutingDataSource里面的public synchronized void addDataSource(String ds, DataSource dataSource)方法加载数据源,数据源存进dataSourceMap中。oms28资讯网——每日最新资讯28at.com

oms28资讯网——每日最新资讯28at.com

随后,如果进行数据库操作,以方法为最小粒度,执行对应方法时,会被
DynamicDataSourceAnnotationInterceptor拦截器拦截
oms28资讯网——每日最新资讯28at.com

oms28资讯网——每日最新资讯28at.com

执行determineDatasource方法,扫描加了@DS注解的类或者方法,随后调用DynamicDataSourceContextHolder.poll方法。oms28资讯网——每日最新资讯28at.com

oms28资讯网——每日最新资讯28at.com

DynamicDataSourceContextHolder.poll方法将当前线程的数据源名加到对应的ThreadLocal线程本地中oms28资讯网——每日最新资讯28at.com

oms28资讯网——每日最新资讯28at.com

在之后的数据操作中,会调用org.springframework.jdbc.datasource.getConnection()方法,ThreadLocal中获取之前拦截器存进去动态数据源名,如果没有获取到,就默认为配置的primary数据源,这完成了对应的动态数据源切换。oms28资讯网——每日最新资讯28at.com

oms28资讯网——每日最新资讯28at.com

3、总结

基于Mybatis-plus的@DS注解可以实现动态数据源切换,具有实现简单的优点,虽然没有AOP实现,但是用到了AOP的思想,后续小编将写一篇基于AOP的实现方式,欢迎大家关注。oms28资讯网——每日最新资讯28at.com

作者:京东保险 郭盼oms28资讯网——每日最新资讯28at.com

来源:京东云开发者社区 转载请注明来源oms28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-16034-0.html多数据源管理:掌握@DS注解的威力

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 使用Python类型提示,保持代码整洁,提高可读性

下一篇: 使用Java实现每分钟限流100个请求的功能

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 中兴AX5400Pro+上手体验:再升级 双2.5G网口+USB 3.0这次全都有

    2021年11月的时候,中兴先后发布了两款路由器产品,中兴AX5400和中兴AX5400 Pro,从产品命名上就不难看出这是隶属于同一系列的,但在外观设计上这两款产品可以说是完全没一点关系
  • 得物效率前端微应用推进过程与思考

    一、背景效率工程随着业务的发展,组织规模的扩大,越来越多的企业开始意识到协作效率对于企业团队的重要性,甚至是决定其在某个行业竞争中突围的关键,是企业长久生存的根本。得物
  • 阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的&ldquo;征求意见版&rdquo;:1、取消P序列
  • 冯提莫签约抖音公会 前“斗鱼一姐”消失在直播间

    来源:直播观察提起&ldquo;冯提莫&rdquo;这个名字,很多网友或许听过,但应该不记得她是哪位主播了。其实,作为曾经的&ldquo;斗鱼一姐&rdquo;,冯提莫在游戏直播的年代影响力不输于现
  • 华为发布HarmonyOS 4:更好玩、更流畅、更安全

    在8月4日的华为开发者大会2023(HDC.Together)大会上,HarmonyOS 4正式发布。自2019年发布以来,HarmonyOS一直以用户为中心,经历四年多的发展HarmonyOS已
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • iQOO Neo8系列或定档5月23日:首发天玑9200+ 安卓跑分王者

    去年10月,iQOO推出了iQOO Neo7系列机型,不仅搭载了天玑9000+,而且是同价位唯一一款天玑9000+直屏旗舰,一经上市便受到了用户的广泛关注。在时隔半年后,
  • DRAM存储器10月价格下跌,NAND闪存本月价格与上月持平

    10月30日,据韩国媒体消息,自今年年初以来一直在上涨的 DRAM 存储器的交易价格仅在本月就下跌了近 10%,此次是全年首次降价,而NAND 闪存本月价格与上月持平。市
Top