多数据源

特性

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");
    }
}
posted @   半条咸鱼  阅读(184)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示