SpringBoot+MybatisPlus+Druid (超簡單超詳細)實現讀寫分離

說明:

開始: 

  • 使用開源中國發布的優秀框架 SpringBoot 多數據源快速啓動器 dynamic-datasource

  • 本文只簡單使用,詳細請點擊上方鏈接查看文檔
  • 本文環境:
    • springboot    2.1.2.RELEASE
    • mysql              8.0.15
    • mybatisplus  2.3.3
    • druid               1.1.10

1. maven導入jar包

<!--主從配置依賴-->
<dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
   <version>2.4.2</version>
</dependency>

2. application.yml中配置,替換掉原來的druid配置,下圖配置中,改爲你自己的主從庫的url,用戶名,密碼

spring:
  # 數據源
  datasource:
    dynamic:
      primary: master
      datasource:
        master:
          username: root
          password: root
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://localhost:3306/xboot?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&useSSL=false
          druid: #以下均爲默認值
            initial-size: 3
            max-active: 8
            min-idle: 2
            max-wait: -1
            min-evictable-idle-time-millis: 30000
            max-evictable-idle-time-millis: 30000
            time-between-eviction-runs-millis: 0
            validation-query: select 1
            validation-query-timeout: -1
            test-on-borrow: false
            test-on-return: false
            test-while-idle: true
            pool-prepared-statements: true
            max-open-prepared-statements: 100
            filters: stat,wall
            share-prepared-statements: true
        slave:
          username: root
          password: root
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://localhost:3307/xboot?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&useSSL=false
          druid: #以下均爲默認值
            initial-size: 3
            max-active: 8
            min-idle: 2
            max-wait: -1
            min-evictable-idle-time-millis: 30000
            max-evictable-idle-time-millis: 30000
            time-between-eviction-runs-millis: 0
            validation-query: select 1
            validation-query-timeout: -1
            test-on-borrow: false
            test-on-return: false
            test-while-idle: true
            pool-prepared-statements: true
            max-open-prepared-statements: 100
            filters: stat,wall
            share-prepared-statements: true

3. 在啓動類@SpringBootApplication註解中,添加排除原生Druid的配置類。如下:

DruidDataSourceAutoConfigure會注入一個DataSourceWrapper,其會在原生的spring.datasource下找url,username,password等。而我們動態數據源的配置路徑是變化的。

@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
public class Application {
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}

4. 上面三步,已配置好讀寫分離,下面使用註解即可選擇使用主從庫

@DS("slave_1") 括號內即是yml中配置的數據源名稱,不加註解默認是訪問主庫master,可加在service方法上,也可加在mapper方法上。

下圖示例,是用在service方法

/**
 * @Description: 查出所有是審批人的員工
 * @auther: Hanweihu
 * @date: 8:10 2019/4/16
 * @param: [pageVo]
 * @return: com.baomidou.mybatisplus.plugins.Page
 */
@DS("slave_1")
public Page selectAudit(PageVo pageVo) {
    Wrapper<Staff> entity = new EntityWrapper<Staff>();
    entity.eq("is_audit","1");
    entity.eq("IS_DELETE","0");
    Page<Staff> page = new Page<>(pageVo.getPageNumber(), pageVo.getPageSize());
    List<Staff> staffList = staffMapper.selectPage(page, entity);
    return page.setRecords(staffList);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章