项目作者: z-xiaohua

项目描述 :
基于springboot的快速集成一主一从读写分离的启动器,适合MyBatis + Druid + MySQL的项目使用,有例子可以参考快速上手
高级语言: Java
项目地址: git://github.com/z-xiaohua/dynamic-datasource-spring-boot-starter.git
创建时间: 2019-03-27T03:25:03Z
项目社区:https://github.com/z-xiaohua/dynamic-datasource-spring-boot-starter

开源协议:Apache License 2.0

下载


介绍

dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成一主一从读写分离的启动器,适合MyBatis + Druid + MySQL的项目使用。

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

使用

  1. 下载源码,打包项目到maven本地仓库或私有仓库
  2. 引入dynamic-datasource-spring-boot-starter
    1. <dependency>
    2. <groupId>com.zhongxiaohua</groupId>
    3. <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    4. <version>${dynamic-datasource-spring-boot-starter.version}</version>
    5. </dependency>
  3. 引入相关包
  1. <dependency>
  2. <groupId>org.mybatis.spring.boot</groupId>
  3. <artifactId>mybatis-spring-boot-starter</artifactId>
  4. <version>${mybatis.spring.boot.starter.version}</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.alibaba</groupId>
  8. <artifactId>druid-spring-boot-starter</artifactId>
  9. <version>${druid.spring.boot.starter.version}</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>mysql</groupId>
  13. <artifactId>mysql-connector-java</artifactId>
  14. </dependency>
  1. 配置数据源
  1. spring:
  2. datasource:
  3. dynamic:
  4. # 设置动态切换数据源的切面路径规则,可设置多个
  5. patterns: com.zhongxiaohua.samples.dao.*
  6. username: root
  7. password: root_hua123
  8. druid:
  9. # 配置多数据源
  10. master:
  11. url: jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&noDatetimeStringSync=true&zeroDateTimeBehavior=convertToNull
  12. slave:
  13. url: jdbc:mysql://127.0.0.1:3306/demo_slave?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&noDatetimeStringSync=true&zeroDateTimeBehavior=convertToNull
  14. #......省略
  1. 启动时,排除Druid的自动配置类
  1. @SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)

原理

初始化主数据源和从数据源,封装到自定义的数据源,然后通过切面和事务隔离级别在执行数据库操作前判断使用哪个数据源

注意

  • @Trasactional注解的方法无法切换数据源
  • 应该避免在同一个Service方法中写入后立即查询,因为主从同步存在时间差,会有几率查询不出来,如果一定需要,应当在Service方法上添加@Transactional注解以保证主数据源