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


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

    同一个数据库内分表

    目录

    1.数据库表

    2.配置

    3.引入的jar包

    4.数据库操作

    5.以下是可运行的例子

    6.参考


    1.数据库表

    数据库:

    表结构

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

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

    2.配置

    application.yaml配置:

    1. --- #################### 数据库相关配置 ####################
    2. spring:
    3. # 数据源配置项
    4. autoconfigure:
    5. exclude:
    6. - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
    7. # main:
    8. # allow-bean-definition-overriding: true
    9. datasource:
    10. druid: # Druid 【监控】相关的全局配置
    11. web-stat-filter:
    12. enabled: true
    13. stat-view-servlet:
    14. enabled: true
    15. allow: # 设置白名单,不填则允许所有访问
    16. url-pattern: /druid/*
    17. login-username: # 控制台管理用户名和密码
    18. login-password:
    19. filter:
    20. stat:
    21. enabled: true
    22. log-slow-sql: true # 慢 SQL 记录
    23. slow-sql-millis: 100
    24. merge-sql: true
    25. wall:
    26. config:
    27. multi-statement-allow: true
    28. dynamic: # 多数据源配置
    29. druid: # Druid 【连接池】相关的全局配置
    30. initial-size: 5 # 初始连接数
    31. min-idle: 10 # 最小连接池数量
    32. max-active: 20 # 最大连接池数量
    33. max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
    34. time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
    35. min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
    36. max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
    37. validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
    38. test-while-idle: true
    39. test-on-borrow: false
    40. test-on-return: false
    41. primary: master
    42. datasource:
    43. master:
    44. name: ruoyi-vue-pro
    45. 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 连接的示例
    46. # 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 连接的示例
    47. # url: jdbc:postgresql://127.0.0.1:5432/${spring.datasource.dynamic.datasource.slave.name} # PostgreSQL 连接的示例
    48. # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
    49. # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=${spring.datasource.dynamic.datasource.master.name} # SQLServer 连接的示例
    50. username: root
    51. password: root
    52. # username: sa
    53. # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W
    54. slave: # 模拟从库,可根据自己需要修改
    55. name: ruoyi-vue-pro
    56. 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 连接的示例
    57. # 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 连接的示例
    58. # url: jdbc:postgresql://127.0.0.1:5432/${spring.datasource.dynamic.datasource.slave.name} # PostgreSQL 连接的示例
    59. # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
    60. # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=${spring.datasource.dynamic.datasource.slave.name} # SQLServer 连接的示例
    61. username: root
    62. password: root
    63. # username: sa
    64. # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W
    65. #shardingsphere相关配置
    66. # 分库分表配置
    67. #shardingsphere相关配置
    68. shardingsphere:
    69. datasource:
    70. names: m1 #配置库的名字,随意
    71. m1: #配置目前m1库的数据源信息
    72. type: com.alibaba.druid.pool.DruidDataSource
    73. driverClassName: com.mysql.jdbc.Driver
    74. url: jdbc:mysql://localhost:3306/ruoyi-vue-pro?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    75. username: root
    76. password: root
    77. sharding:
    78. tables:
    79. system_dept: # 指定t_order表的数据分布情况,配置数据节点
    80. actualDataNodes: m1.system_dept_$->{1..8}
    81. tableStrategy: #分表策略, 可选项有 inline, standard, complex, hint, none
    82. inline: # 指定t_order表的分片策略,分片策略包括分片键和分片算法 #inline(行表达式分片策略)- 根据单一分片键进行精确分片
    83. shardingColumn: id
    84. algorithmExpression: system_dept_$->{id % 8 + 1}
    85. # keyGenerator: # 指定t_order表的主键生成策略为SNOWFLAKE
    86. # column: order_id #指定主键
    87. # type: SNOWFLAKE #主键生成策略为SNOWFLAKE
    88. default-data-source-name: m1 #不使用分表分库策略的数据源
    89. props:
    90. sql:
    91. show: true

    3.引入的jar包

    1. <-- 这个jar放到mybatisjar包前面-->
    2. <dependency>
    3. <groupId>org.mybatisgroupId>
    4. <artifactId>mybatis-typehandlers-jsr310artifactId>
    5. <version>1.0.1version>
    6. dependency>
    7. <dependency>
    8. <groupId>org.apache.shardingspheregroupId>
    9. <artifactId>sharding-jdbc-spring-boot-starterartifactId>
    10. <version>4.0.0-RC1version>
    11. dependency>

    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)

  • 相关阅读:
    Android项目更新依赖和打包步骤和问题汇总
    Qt多线程
    opencv之cvScalar
    美团校招机试 - 小美的平衡矩阵(20240309-T1)
    Python的优点及工作前景
    spring官方文档中文
    如何使用Postman调试HMS Core推送接口?
    安全防御——APT
    李航统计学习方法python实现-决策树2-sklearn
    辩证性在需求面前毫无逻辑
  • 原文地址:https://blog.csdn.net/xiaobijia/article/details/134297918