Sharding JDBC整合SpringBoot 2.x 和 MyBatis Plus 進行分庫分表


Sharding JDBC整合SpringBoot 2.x 和 MyBatis Plus 進行分庫分表

交易所流水表的單表數據量已經過億,選用Sharding-JDBC進行分庫分表。MyBatis-Plus和MyBatis的整合方式完全一樣,因此需要整合MyBatis的也可參考。采用Sharding-JDBC
作為分表插件的原因是配置方便,只需要添加Maven依賴導入Jar包而不需要中間件,且對業務代碼無侵入。目前在實際業務中用的是單庫多表,將交易流水表分成了100張。

配置經過生產環境的檢驗,親測可用。

分庫分表相關的pom文件如下:

<!-- 提供mysql驅動 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

<!--mybatis-plus自動的維護了mybatis以及mybatis-spring的依賴,
             在springboot中這三者不能同時的出現,避免版本的沖突-->

<!--MyBatis-Plus相關依賴-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.0.1</version>
</dependency>

<!--如果整合MyBatis而不是MyBatis-Plus,用這個依賴-->
<!--<dependency>-->
<!--<groupId>org.mybatis.spring.boot</groupId>-->
<!--<artifactId>mybatis-spring-boot-starter</artifactId>-->
<!--<version>2.0.1</version>-->
<!--</dependency>-->

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.0.0-RC2</version>
</dependency>

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-namespace</artifactId>
    <version>4.0.0-RC2</version>
</dependency>

SpringBoot配置文件如下:

spring:
  shardingsphere:
    datasource:
#      數據庫名稱,可自定義,可以為多個
#      names: ds0,ds1
      names: ds0
      ds0:
#        采用的數據庫連接池
        type: com.zaxxer.hikari.HikariDataSource
#        JDBC連接Mysql6 com.mysql.cj.jdbc.Driver時,需要指定時區serverTimezone,若采用com.mysql.jdbc.Driver則無需指定
        driver-class-name: com.mysql.cj.jdbc.Driver
#        url是數據庫的 JDBC URL,而jdbc-url是用來創建連接的 JDBC URL。Hikari沒有url屬性,所以這里用jdbc-url
        jdbc-url: jdbc:mysql://10.10.10.101:3306/transaction?&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Hongkong
        username: 晝嶼
        password: 晝嶼

    sharding:
      tables:
#      需要進行分表的邏輯表名,用MyBatis或者MyBatis-Plus操作數據庫時只需要操作邏輯表即可,xml文件也只需要配置邏輯表
        tranasction:
#        實際的表結點,分了100個表,表名為tranasction0-tranasction99,
          actual-data-nodes: ds0.tranasction$->{0..99}
#          分表策略
          table-strategy:
#          主鍵生成策略,這里采用的是Sharding默認的雪花算法作為分布式唯一id算法
            key-generator:
              column: id
              type: SNOWFLAKE
#            分表策略,我在交易流水表這選擇的策略是根據用戶id分表,可以結合具體業務,根據時間分表或者根據其他參數分表
            inline:
              sharding-column: uid
              algorithm-expression: tranasction$->{uid % 100}

    props:
#      是否打印邏輯SQL語句和實際SQL語句,建議調試時打印,在生產環境關閉
      sql:
        show: true

#MyBatis-Plus的相關配置,如果采用MyBatis可以忽略此部分
mybatis-plus:
  # 如果是放在src/main/java目錄下 classpath:/com/yourpackage/*/com.exchange.mapper/*Mapper.com.exchange.mapper
  # 如果是放在resource目錄 classpath:/com.exchange.mapper/*Mapper.com.exchange.mapper
  mapper-locations: classpath:/mapper/*.xml
  #實體掃描,多個package用逗號或者分號分隔
  typeAliasesPackage: com.exchange.yourpackage.entity
  global-config:
    #主鍵類型  0:"數據庫ID自增", 1:"用戶輸入ID",2:"全局唯一ID (數字類型唯一ID)", 3:"全局唯一ID UUID";
    #若采用雪花算法生成id,需要在生成的實體類中將id的type = IdType.AUTO去掉
    id-type: 0
    #字段策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷"
    field-strategy: 2
    #駝峰下划線轉換
    db-column-underline: true
    #刷新mapper 調試神器
    #refresh-mapper: true
    #數據庫大寫下划線轉換
    #capital-mode: true
    # Sequence序列接口實現類配置
    #邏輯刪除配置(下面3個配置)
    logic-delete-value: Y
    logic-not-delete-value: N
    #sql-injector: com.nky.pork.quality.standard.conf.MybatisPlusConfig
    configuration:
      #配置返回數據庫(column下划線命名&&返回java實體是駝峰命名),自動匹配無需as(沒開啟這個,SQL需要寫as: select user_id as userId)
      map-underscore-to-camel-case: true
      cache-enabled: false
      #配置JdbcTypeForNull, oracle數據庫必須配置
      jdbc-type-for-null: 'null'

#是否輸出Mybatis-Plus代執行的SQL語句
logging:
  level:
    com.exchange.yourpackage.dao: trace

server:
  port: 6666
  servlet:
    context-path: /zhouYu

Sharding JDBC對業務代碼時無侵入的,只需要用未分庫分表前對實體表的操作方法,來操作分庫分表后的邏輯表即可。也可完美兼容PageInfo插件進行分頁。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM