水平分表是在同一个数据库内,把同一个表的数据按一定规则拆到多个表中,多数据源采用 mybatis-plus的dynamic-datasource 分库分表采用sharding-jdbc 数据库连接池管理是alibaba的druid-spring-boot-starter
同一个数据库内分表
目录
数据库:
表结构
- 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;
在配置多数据源的情况下分表:
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
- <-- 这个jar放到mybatisjar包前面-->
- <dependency>
- <groupId>org.mybatisgroupId>
- <artifactId>mybatis-typehandlers-jsr310artifactId>
- <version>1.0.1version>
- dependency>
- <dependency>
- <groupId>org.apache.shardingspheregroupId>
- <artifactId>sharding-jdbc-spring-boot-starterartifactId>
- <version>4.0.0-RC1version>
- dependency>
正常操作就行,不用加@DS制定数据源
springboot2.7.17,mybatisplus3.5.3.1,dynamic-datasource3.5.1
源码:
https://download.csdn.net/download/xiaobijia/88516542
【Sharding-JDBC】(一) 整合mybatis-plus 水平分表_mybatisplus水平分表-CSDN博客
多数据源+数据库分库分表_多数据源分库分表_Amarone的博客-CSDN博客
Cause: java.sql.SQLFeatureNotSupportedException: getObject with type-CSDN博客