,多数据源+Mybatisplus + Sharding JDBC同一库中分表

水平分表是在同一个数据库内,把同一个表的数据按一定规则拆到多个表中,多数据源采用 mybatis-plus的dynamic-datasource 分库分表采用sharding-jdbc 数据库连接池管理是alibaba的druid-spring-boot-starter

同一个数据库内分表

目录

1.数据库表

2.配置

3.引入的jar包

4.数据库操作

5.以下是可运行的例子

6.参考


1.数据库表

数据库:

,多数据源+Mybatisplus + Sharding JDBC同一库中分表_第1张图片

表结构

CREATE TABLE `t_order_4` (
  `order_id` bigint NOT NULL COMMENT '订单id',
  `price` decimal(10,2) NOT NULL COMMENT '订单价格',
  `user_id` bigint NOT NULL COMMENT '下单用户id',
  `status` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '订单状态',
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`order_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC;

在配置多数据源的情况下分表:

2.配置

application.yaml配置:

--- #################### 数据库相关配置 ####################
spring:
  # 数据源配置项
  autoconfigure:
    exclude:
      - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
#  main:
#    allow-bean-definition-overriding: true
  datasource:
    druid: # Druid 【监控】相关的全局配置
      web-stat-filter:
        enabled: true
      stat-view-servlet:
        enabled: true
        allow: # 设置白名单,不填则允许所有访问
        url-pattern: /druid/*
        login-username: # 控制台管理用户名和密码
        login-password:
      filter:
        stat:
          enabled: true
          log-slow-sql: true # 慢 SQL 记录
          slow-sql-millis: 100
          merge-sql: true
        wall:
          config:
            multi-statement-allow: true
    dynamic: # 多数据源配置
      druid: # Druid 【连接池】相关的全局配置
        initial-size: 5 # 初始连接数
        min-idle: 10 # 最小连接池数量
        max-active: 20 # 最大连接池数量
        max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
        time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
        min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
        max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
        validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
        test-while-idle: true
        test-on-borrow: false
        test-on-return: false
      primary: master
      datasource:
        master:
          name: ruoyi-vue-pro
          url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
          #          url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT # MySQL Connector/J 5.X 连接的示例
          #          url: jdbc:postgresql://127.0.0.1:5432/${spring.datasource.dynamic.datasource.slave.name} # PostgreSQL 连接的示例
          #          url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
          #          url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=${spring.datasource.dynamic.datasource.master.name} # SQLServer 连接的示例
          username: root
          password: root
        #          username: sa
        #          password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W
        slave: # 模拟从库,可根据自己需要修改
          name: ruoyi-vue-pro
          url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
          #          url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT # MySQL Connector/J 5.X 连接的示例
          #          url: jdbc:postgresql://127.0.0.1:5432/${spring.datasource.dynamic.datasource.slave.name} # PostgreSQL 连接的示例
          #          url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
          #          url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=${spring.datasource.dynamic.datasource.slave.name} # SQLServer 连接的示例
          username: root
          password: root
          # username: sa
          # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W
  #shardingsphere相关配置
  # 分库分表配置
  #shardingsphere相关配置
  shardingsphere:
    datasource:
      names: m1   #配置库的名字,随意
      m1:   #配置目前m1库的数据源信息
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/ruoyi-vue-pro?useUnicode=true&characterEncoding=UTF-8&useSSL=false
        username: root
        password: root
    sharding:
      tables:
        system_dept:  # 指定t_order表的数据分布情况,配置数据节点
          actualDataNodes: m1.system_dept_$->{1..8}
          tableStrategy: #分表策略, 可选项有 inline, standard, complex, hint, none
            inline:   # 指定t_order表的分片策略,分片策略包括分片键和分片算法  #inline(行表达式分片策略)- 根据单一分片键进行精确分片
              shardingColumn: id
              algorithmExpression: system_dept_$->{id % 8 + 1}
    #          keyGenerator:   # 指定t_order表的主键生成策略为SNOWFLAKE
    #            column: order_id  #指定主键
    #            type: SNOWFLAKE  #主键生成策略为SNOWFLAKE

    default-data-source-name: m1 #不使用分表分库策略的数据源
    props:
      sql:
        show: true

3.引入的jar包

        <-- 这个jar放到mybatisjar包前面-->
        
            org.mybatis
            mybatis-typehandlers-jsr310
            1.0.1
        
        
            org.apache.shardingsphere
            sharding-jdbc-spring-boot-starter
            4.0.0-RC1
        

4.数据库操作

正常操作就行,不用加@DS制定数据源

5.以下是可运行的例子

springboot2.7.17,mybatisplus3.5.3.1,dynamic-datasource3.5.1

源码:

https://download.csdn.net/download/xiaobijia/88516542

  1. 6.参考

  【Sharding-JDBC】(一) 整合mybatis-plus 水平分表_mybatisplus水平分表-CSDN博客

多数据源+数据库分库分表_多数据源分库分表_Amarone的博客-CSDN博客

Cause: java.sql.SQLFeatureNotSupportedException: getObject with type-CSDN博客

新版SpringBoot集成sharding-jdbc报shardingsphere.shardingjdbc.jdbc.unsupported.AbstractUnsupportedOperationConnection.isValid解决方案 - Laeni - 博客园 (cnblogs.com)

你可能感兴趣的:(数据库,spring,boot)