613

GitHub - baomidou/dynamic-datasource-spring-boot-starter: dynamic datasource for...

 4 years ago
source link: https://github.com/baomidou/dynamic-datasource-spring-boot-starter
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

README.md

68747470733a2f2f696d616765732e67697465652e636f6d2f75706c6f6164732f696d616765732f323031392f303632362f3233313034365f66343438393262395f3730393838332e706e67

一个基于springboot的快速集成多数据源的启动器

68747470733a2f2f7777772e7472617669732d63692e6f72672f62616f6d69646f752f64796e616d69632d64617461736f757263652d737072696e672d626f6f742d737461727465722e7376673f6272616e63683d6d6173746572 68747470733a2f2f696d672e736869656c64732e696f2f6d6176656e2d63656e7472616c2f762f636f6d2e62616f6d69646f752f64796e616d69632d64617461736f757263652d737072696e672d626f6f742d737461727465722e737667 687474703a2f2f696d672e736869656c64732e696f2f3a6c6963656e73652d6170616368652d627269676874677265656e2e737667 68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4a444b2d312e372b2d677265656e2e737667 68747470733a2f2f696d672e736869656c64732e696f2f62616467652f737072696e67426f6f742d312e342b5f312e352b5f322e302b2d677265656e2e737667

简介

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

其支持 Jdk 1.7+, SpringBoot 1.4.x 1.5.x 2.0.x

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

特性

  1. 数据源分组,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。
  2. 内置敏感参数加密和启动初始化表结构schema数据库database。
  3. 提供对Druid,Mybatis-Plus,P6sy,Jndi的快速集成。
  4. 简化Druid和HikariCp配置,提供全局参数配置。
  5. 提供自定义数据源来源接口(默认使用yml或properties配置)。
  6. 提供项目启动后增减数据源方案。
  7. 提供Mybatis环境下的 纯读写分离 方案。
  8. 使用spel动态参数解析数据源,如从session,header或参数中获取数据源。(多租户架构神器)
  9. 提供多层数据源嵌套切换。(ServiceA >>> ServiceB >>> ServiceC,每个Service都是不同的数据源)
  10. 提供 不使用注解使用 正则 或 spel 来切换数据源方案(实验性功能)。

约定

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

使用方法

  1. 引入dynamic-datasource-spring-boot-starter。
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  <version>${version}</version>
</dependency>
  1. 配置数据源。
spring:
  datasource:
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源.
      datasource:
        master:
          url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver
        slave_1:
          url: jdbc:mysql://xx.xx.xx.xx:3307/dynamic
          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
          schema: db/schema.sql # 配置则生效,自动初始化表结构
          data: db/data.sql # 配置则生效,自动初始化数据
          continue-on-error: true # 默认true,初始化失败是否继续
          separator: ";" # sql默认分号分隔符
          
       #......省略
       #以上会配置一个默认库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<Map<String, Object>> selectAll() {
    return  jdbcTemplate.queryForList("select * from user");
  }
  
  @Override
  @DS("slave_1")
  public List<Map<String, Object>> selectByCondition() {
    return  jdbcTemplate.queryForList("select * from user where age >10");
  }
}

赶紧集成体验一下吧! 如果需要更多功能请点击下面链接查看详细文档!


  • 加密,Druid集成,MybatisPlus集成,动态增减数据源,自定义切换规则,纯读写分离插件等等更多更细致的文档在这里 点击查看

  • 项目Javadoc一览 点击查看


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK