2 数据源配置_如何在程序运行中动态切换数据源?架构师必读秘笈
说起动态数据源,大家应该也不陌生。例如在读写分离系统中,则要对请求中的读写操作进行分离,让读和写落在不同的数据库上;例如在多租户系统中,则要根据请求来源租户的不同,让其落在不同租户的数据库上;例如在分库应用中,也要根据不同的规则让请求落在不同的数据库上。于是,我们的应用要根据请求的不同,操作不同的数据库,这时就需要动态数据源的帮助。
DynamicDataSource就是一个出色的动态数据源,他能让你在程序运行过程中动态增删和切换数据源。而且,它十分易用。使用它在一个请求中查询多个数据源变得无比简单。
1 特点
DynamicDataSource具有以下特点:
- 小巧:只实现最基本的数据源增删、切换功能,不涉及相关业务。
- 易用:只需要简单的配置和几个方法的调用便可以完成所有功能。
- 兼容:增加数据源时,数据源信息可以来自配置文件、前端界面输入、数据库查询等各种方式。
- 无侵入:切换数据源操作可以由切面触发、逻辑触发、注解触发等,均可以供开发者自由实现。
DynamicDataSource中常用的方法有:
boolean addDataSource(DataSourceInfo dataSourceInfo, Boolean overwrite)
:增加一个数据源,overwrite用来决定如果已经存在同名数据源时是否要覆盖boolean addAndSwitchDataSource(DataSourceInfo dataSourceInfo, Boolean overwrite)
:增加一个数据源并切换到该数据源,overwrite用来决定如果已经存在同名数据源时是否要覆盖boolean switchDataSource(String dataSourceName)
:切换到指定名称的数据源boolean delDataSource(String dataSourceName)
:删除一个数据源void switchDefaultDataSource()
:切换到默认的数据源DataSource getDefaultDataSource()
:获取默认数据源
以上方法都是多线程安全的。你可以在切面、操作逻辑、注解中调用以上方法,完成数据源的动态增删与切换。
2 快速上手
在demo
文件夹下提供一个示例项目,供大家快速上手。以该demo项目为例,我们介绍DynamicDataSource的使用。
2.1 引入依赖包
在POM文件中引入DynamicDataSource的jar包。
2.2 基本配置
在application.properties文件中写入默认的数据源信息,下面为示例。可按照自己的数据源进行修改。
禁止Spring对DataSourceAutoConfiguration类的加载,否则该类会去加载固定的数据源。
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
增加对DynamicDataSource所在包的Bean的扫描。
@ComponentScan(basePackages = {"com.github.yeecode.dynamicdatasource","{other_package_root}"})
2.3 开始使用
至此,使用DynamicDataSource所需的全部配置就完成了。使用下面方式注入DynamicDataSource后便可以调用其中的数据源操作方法。
@Autowired
private DynamicDataSource dynamicDataSource;
我们可以按照demosqlDDL.md
文件所述建立两个数据源,然后测试DynamicDataSource的工作情况。
启动DynamicDataSourceDemo项目得到如下界面。
例如我们可以在一个接口内实现数据源的切换,从而在请求到达/
接口时,先后查询了两个数据源中的数据,如代码所示。
可以得到下图所示的结果。下图打印的两行语句分别来自两个数据源。
数据源新增、删除、切换操作可以在切面中、业务逻辑中、注解中等各处进行触发。DynamicDataSource不做任何限制,交由开发人员按照实际需要实现。
3 总结
怎么样,DynamicDataSource的使用是不是非常简单。通过Maven仓库直接下载依赖,并且还有Demo项目指导,瞬间上手。
从此,动态数据源的切换So Easy!
实属架构师、程序员秘笈,收藏起来,日后用。其具体接口可能在日后升级中变动,请以最新版本的README文档为准。项目地址如下:
https://github.com/yeecode/DynamicDataSourcegithub.com
2 数据源配置_如何在程序运行中动态切换数据源?架构师必读秘笈相关推荐
- springboot 中动态切换数据源(多数据源应用设计)
目录 原理图 数据库 项目结构 启动类 entity controller service mapper 配置文件 线程上下文 (DataSourceHolder) 动态数据源 DynamicData ...
- Spring Boot多数据源配置并通过注解实现动态切换数据源
文章目录 1. AbstractRoutingDataSource类介绍 2. ThreadLocal类介绍 3. 环境准备 3.1 数据库准备 3.2 项目创建 4. 具体实现 4.1 定义数据源枚 ...
- mybatis手动切换数据库_在Spring项目中使用 Mybatis 如何实现动态切换数据源
在Spring项目中使用 Mybatis 如何实现动态切换数据源 发布时间:2020-11-17 16:20:11 来源:亿速云 阅读:108 作者:Leah 这篇文章将为大家详细讲解有关在Sprin ...
- c语言代码存放的区域 堆栈,C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)...
BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段 :数据 ...
- 程序员好几年才能成为架构师_成为更好的企业架构师
程序员好几年才能成为架构师 企业架构师似乎越来越多地参与"尝试新事物"或推翻技术或实施建议(否定命令),而不必费劲或无需编写任何代码. 我已经在很多地方观察到了这一点,无论是与建筑 ...
- 动态切换数据源(spring+hibernate)
起因:在当前我手上的一个项目中需要多个数据源,并且来自于不同类型的数据库... 因为很多历史原因.这个项目的住数据源是MySQL,整个系统的CURD都是操作的这个数据库. 但是还有另外两个用于数据采集 ...
- SpringBoot动态切换数据源-快速集成多数据源的启动器
简介 dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器. 其支持 Jdk 1.7+, SpringBoot 1.4 ...
- 5分钟弄懂程序员的如何升级到架构师。
对我们程序员来说,发展的途径要么是走管理岗,从开发升级到项目经理甚至是部门经理:要么走技术升级路线.不过在技术路线方面,无法升级到架构师的程序员不在少数.一方面,在不少公司的高级开发岗位上,无法让程序 ...
- 通过切面动态切换数据源
标题业务场景:大量的项目的数据库需要从db2迁移到oracle,为项目上线后出现不可预料的错误可及时回退,需要可以随时切换数据源 以控制层为切点,动态切换数据源,通过查询数据库查询当前应用的开关,来判 ...
最新文章
- 学术前沿 | 图像质量量化评估标准综述
- NameNode机制和DataNode机制
- JBoss Fuse 6.1 + HawtIO第一部分
- Android手机隐藏命令大全
- 可转债的投资价值算法
- iscsi:IO操作流程(一)
- 投资赚钱发财, 财务自由,需要如下几个因素
- 文本主题模型之LDA(二) LDA求解之Gibbs采样算法
- es6箭头函数内部判断
- ElastcSearch的Mapping映射建立
- PyCharm免费版安装使用
- 在线制作ico矢量图标
- 新浪微博接口在safri下的bug
- Linux下查看用户列表和删除用户,详例
- HDOJ 5773 The All-purpose Zero
- 水哥王昱珩直播解锁华为Mate 20黑科技,超微距效果实力非凡
- 【C语言】calloc函数
- 鹏鹏seo第三课:长尾关键词的认识!
- LabVIEW串口仪器控制
- Xamarin.Forms 之我的花园 - 2.从照片库选择图片和拍照功能
热门文章
- Arm发布移动端v9体系新架构,CPU、GPU、IP全囊括了!
- 【快讯】呼伦贝尔市人民医院利用Oracle APEX快速开发预检分诊系统
- 被嫌弃的互联网的 “一生”(上)
- 秒杀场景_多线程异步抢单队列分析与实现_02
- plsql 快捷键设置
- 把百度网站设为首页_大仙SEO:如何解决网站首页百度收录后被删除?【SEO案例】...
- android padding作用,android:padding和android:layout_margin的区别
- Qt下简单的文件读取
- jq之animate()操作多个属性
- 在php中图片放大怎么实现,用PHP实现图片的缩放与裁剪