多数据源
特性
1、支持数据源分组 ,适用于多种场景:纯粹多库、读写分离、一主多从、混合模式
2、支持数据库敏感配置信息,加密 ENC()
3、支持每个数据库独立初始化表结构 schema 和数据库 database
4、支持无数据源启动,支持懒加载数据源(需要的时候再创建连接)
5、支持自定义注解 ,需继承DS(3.2.0+)
6、提供并简化对 Druid,HikariCp,BeeCp,Dbcp2 的快速集成
7、提供对 Mybatis-Plus,Quartz,ShardingJdbc,P6sy,Jndi 等组件的集成方案
8、提供自定义数据源来源方案(如全从数据库加载)
9、提供项目启动后,动态增加移除数据源方案
10、提供 Mybatis 环境下的纯读写分离方案
11、提供使用 spel 动态参数解析数据源方案,内置 spel,session,header,支持自定义
12、支持多层数据源嵌套切换(ServiceA >>> ServiceB >>> ServiceC)
13、提供基于 seata 的分布式事务方案
14、提供本地多数据源事务方案
约定
1、本框架只做切换数据源,并不限制你的具体操作,切换了数据源可以做任何 CRUD
2、配置文件所有以下划线 _ 分割的数据源,首部即为组的名称,相同组名称的数据源会放在一个组下
3、切换数据源可以是组名,也可以是具体数据源名称,组名则切换时采用负载均衡算法切换
4、默认的数据源名称为 master,可以通过 spring.datasource.dynamic.primary 修改
5、方法上的注解优先于类上注解
6、DS 支持继承抽象类上的 DS,暂不支持继承接口上的 DS
使用
1、引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
2、配置多数据源
(1)示例
spring:
datasource:
dynamic:
primary: master #设置默认的数据源或者数据源组,默认值为master
strict: false #严格匹配数据源,默认false:true未匹配到指定数据源时抛异常;false使用默认数据源
datasource:
master:
url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
slave_1:
url: jdbc:mysql://localhost:3306/mybatis_plus_1?characterEncoding=utf-8&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
slave_2:
url: ENC(xxxxx) # 内置加密,使用请查看详细文档
username: ENC(xxxxx)
password: ENC(xxxxx)
driver-class-name: com.mysql.jdbc.Driver
#......省略
#以上会配置一个默认库master,一个组slave下有两个子库slave_1、slave_2
(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:
3、使用 @DS 切换数据源
(1)@DS 可以注解在方法上或类上,同时存在就近原则,方法上注解优先于类上注解
注解 | 结果 |
无 @DS | 默认数据源 |
@DS("dsName") | dsName 可以为组名,也可以为具体某个库的名称 |
(2)示例
@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");
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战