简介

dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。

其支持 Jdk 1.7+, SpringBoot 1.4.x 1.5.x 2.0.x。最新版为

示例项目 可参考项目下的samples目录。

示例项目 可参考项目下的samples目录。

示例项目 可参考项目下的samples目录。

优势

网上关于动态数据源的切换的文档有很多,核心只有两种。

  1. 构建多套环境,优势是方便控制也容易集成一些简单的分布式事务,缺点是非动态同时代码量较多,配置难度大。
  2. 基于spring提供原生的 AbstractRoutingDataSource ,参考一些文档自己实现切换。

如果你的数据源较少,场景不复杂,选择以上任意一种都可以。

如果你需要更多特性,请尝试本动态数据源。

  1. 数据源分组,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。
  2. 简单集成Druid数据源监控多数据源,简单集成Mybatis-Plus简化单表,简单集成P6sy格式化sql,简单集成Jndi数据源。
  3. 简化Druid和HikariCp配置,提供全局参数配置。
  4. 提供自定义数据源来源(默认使用yml或properties配置)。
  5. 项目启动后能动态增减数据源。
  6. 使用spel动态参数解析数据源,如从session,header和参数中获取数据源。(多租户架构神器)
  7. 多层数据源嵌套切换。(一个业务ServiceA调用ServiceB,ServiceB调用ServiceC,每个Service都是不同的数据源)
  8. 使用正则匹配或spel表达式来切换数据源(实验性功能)。

劣势

不能使用多数据源事务(同一个数据源下能使用事务),网上其他方案也都不能提供。

如果你需要使用到分布式事务,那么你的架构应该到了微服务化的时候了。

如果呼声强烈,项目达到800 star,作者考虑集成多数据源事务。(单机架构下多数据源事物)

PS: 如果您只是几个数据库但是有强烈的需求分布式事务,建议还是使用传统方式自己构建多套环境集成atomic这类,网上百度很多。

约定

  1. 本框架只做 切换数据源 这件核心的事情,并不限制你的具体操作,切换了数据源可以做任何CRUD。
  2. 配置文件所有以下划线 _ 分割的数据源 首部 即为组的名称,相同组名称的数据源会放在一个组下。
  3. 切换数据源即可是组名,也可是具体数据源名称,切换时默认采用负载均衡机制切换。
  4. 默认的数据源名称为 master ,你可以通过 spring.datasource.dynamic.primary 修改。
  5. 方法上的注解优先于类上注解。

建议

强烈建议在 主从模式 下遵循普遍的规则,以便他人能更轻易理解你的代码。

主数据库 建议 只执行 INSERT UPDATE DELETE 操作。

从数据库 建议 只执行 SELECT 操作。

使用方法

  1. 引入dynamic-datasource-spring-boot-starter。
com.baomidou dynamic-datasource-spring-boot-starter ${version}
  1. 配置数据源。
spring: datasource: dynamic: primary: master #设置默认的数据源或者数据源组,默认值即为master strict: false #设置严格模式,默认false不启动. 启动后再为匹配到指定数据源时候回抛出异常,不启动会使用默认数据源. datasource: master: username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic slave_1: username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://xx.xx.xx.xx:3307/dynamic slave_2: username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://xx.xx.xx.xx:3308/dynamic #......省略 #以上会配置一个默认库master,一个组slave下有两个子库slave_1,slave_2# 多主多从 纯粹多库(记得设置primary) 混合配置spring: spring: spring: datasource: datasource: datasource: dynamic: dynamic: dynamic: datasource: datasource: datasource: master_1: mysql: master: master_2: oracle: slave_1: slave_1: sqlserver: slave_2: slave_2: postgresql: oracle_1: slave_3: h2: oracle_2:
  1. 使用 @DS 切换数据源。

@DS 可以注解在方法上和类上,同时存在方法注解优先于类上注解。

强烈建议只注解在service实现上。

注解结果没有@DS默认数据源@DS("dsName")dsName可以为组名也可以为具体某个库的名称

@Service@DS("slave")public class UserServiceImpl implements UserService { @Autowired private JdbcTemplate jdbcTemplate; public List> selectAll() { return jdbcTemplate.queryForList("select * from user"); }  @Override @DS("slave_1") public List> selectByCondition() { return jdbcTemplate.queryForList("select * from user where age >10"); }}

git地址:https://gitee.com/baomidou/dynamic-datasource-spring-boot-starter

32位数据源中没有mysql_基于 SpringBoot 多数据源 动态数据源 主从分离 快速启动器...相关推荐

  1. 十进制12345在32位计算机中的十六进制表示方法

    其实是个挺简单的问题. 12345十六进制表示为0x00003039 说明:在32位计算机中,int为4字节,用二进制表示方法应该有32位,但一个十六进制包含4个二进制位.所以表示出来则是8位.在日常 ...

  2. 如何分别是32位微型计算机,32位微型计算机中的32指的是啥

    "32位"是指计算机2113的字长,5261字长越长,计算机的运算精度就越高.32位处4102理器,计算机中的位1653数指的是CPU一次能处理的最大位数.32位计算机的CPU一次 ...

  3. 32位微型计算机中的32字的是,32位微型计算机中32指的是

    32指的2113是计算机的字长.字长较长的计算机,其计算精度也5261会比较4102高.通常称处理字长为8位数据1653的CPU叫8位CPU,32位CPU就是在同一时间内处理字长为32位的二进制数据. ...

  4. 关于32位系统中int、float、short、double等占多少个字节

    关于32位系统中int.float.short.double等占多少个字节 我用VC编译的,测试了一下,代码如下: #include "iostream" using namesp ...

  5. 32位系统中short、short int、int、long int、long、long long所表示数值的范围

    首先我们先测试下各个类型数据在32位系统中所占的字节数,测试代码如下: int s = sizeof(short);int si = sizeof(short int);int i = sizeof( ...

  6. 创世贴|怎么在64或32位系统中运行16位程序《大富翁》

    创世贴|怎么在64或32位系统中运行16位程序<大富翁> 绪言 大家好!纵观游戏行业的发展,可谓是进步迅猛.百花齐放.游戏是每个人在学习.工作之余休闲娱乐的良药.玩游戏的人从皇宫贵族到社会 ...

  7. 64微型计算机中的32,32位微型计算机中32指的是

    32指的2113是计算机的字长.字长较长的计算机,其计算精度也5261会比较4102高.通常称处理字长为8位数据1653的CPU叫8位CPU,32位CPU就是在同一时间内处理字长为32位的二进制数据. ...

  8. php中如何强制转为长整型,PHP长整型在32位系统中强制转化溢出

    CleverCode近期遇到一个PHP项目整形转化问题,mysql有一个字段id是bigint的,里面有长整型,如id = 5147486396.可是php代码因为历史原因却部署在多台机器中,当中A机 ...

  9. windows 32位系统中进程最大可用内存空间为3GB

    windows 32位系统中进程最大可用内存空间为3GB (转) http://msdn.microsoft.com/zh-cn/library/ms189334.aspx 进程地址空间 所有 32 ...

最新文章

  1. Dickey-Fuller检验+迪基-福勒检验
  2. python自动整理文件夹_计算机文件和文件夹的Python自动管理,自动化,电脑,及
  3. 聚类分析简单介绍(附R对应函数介绍)
  4. vim之terminal之窗口大小命令
  5. C# 中 ConcurrentDictionary 一定线程安全吗?
  6. 【017】◀▶ C#学习(九) - ADO.NET
  7. ssm 项目记录用户操作日志和异常日志
  8. github android
  9. bin文件用cad打开_bin文件 打开方法_win7如何打开bin 格式的文件图文步骤
  10. 所用计算机网卡品牌得的型号,惠普无线网卡驱动,详细教您如何
  11. Github每日精选(第17期):Django下的内容管理系统wagtail
  12. 科目三考试挂掉原因分析
  13. 母乳储存袋和奶瓶的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  14. Mininet系列实验(一):Mininet使用源码安装
  15. 快狗打车CTO沈剑:如何利用计划管理提升团队效率和产能
  16. 判断今天属于这月的第几周,并展示这一周的日期(含自定义日期拼接显示)
  17. IT 网络产品厂商聚焦(路由、交换、网络安全、负载均衡、防火墙、行为管理、邮件网关、计费等)...
  18. 基于三相坐标系状态方程的感应电动机起动动态计算matlab程序
  19. 你来到这世界多少天了?
  20. 一年之计在于春 金丰春农业无人机发力绿色防控

热门文章

  1. mysql内存表主从复制_MySQL的内存表在主从同步的注意事项_MySQL
  2. 学C语言开发能实现月薪12K吗?
  3. ios 地图黑屏_ios – 导航控制器显示黑屏
  4. 为什么手机网速太慢_手机明明是满格信号,为什么网速却非常慢?原来是这些功能在捣鬼...
  5. linux开机启动mysql脚本,ubuntu linux下mysql开机自启动 - 心之所向,无惧无悔! - 博客频道 - CSDN.NET...
  6. springboot mybatis整合
  7. [区块链] 带你进入Bitcoin开发 - 环境搭建
  8. SVN的配置与使用方法
  9. Cisco vlan + vtp 配置实例
  10. c# 为你的Form实现动画的效果