九.Spring Boot使用 ShardingSphere + MyBatis + Druid 举行分库分表 ...

打印 上一主题 下一主题

主题 1032|帖子 1032|积分 3096


前言

在当代化微服务架构中,随着数据量的不断增长,单一数据库已难以满足高可用性、扩展性和性能要求。ShardingSphere 提供了分库分表的能力,资助我们轻松实现水平拆分。本文将介绍怎样在 Spring Boot 项目中,结合 MyBatis 和 Druid,实现分库分表的功能。

提示:以下是本篇文章正文内容,下面案例可供参考
一、引入依赖

在父项目中引入shardingsphere-jdbc依赖
  1. dependencies {
  2.          ...
  3.          implementation 'com.alibaba:druid-spring-boot-3-starter:1.2.24'
  4.      implementation 'com.mysql:mysql-connector-j:9.2.0'
  5.      implementation 'org.apache.shardingsphere:shardingsphere-jdbc:5.5.2'
  6. }
复制代码
二、创建一个light-db_1备用数据库

创建一个light-db_1作为分库,表结构和light-db千篇一律
三、设置文件 application-dev.yml

上篇文章介绍使用mybatis+druid的时间是直接在datasource下设置了数据库毗连参数,这里我们将数据库设置文件放在单独的shardingsphere-config.yml专门举行分库分表的设置
  1. spring:
  2.   datasource:
  3.     url: jdbc:shardingsphere:classpath:shardingsphere-config.yml
  4.     driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
  5.     druid:
  6.       initial-size: 5
  7.       min-idle: 10
  8.       max-active: 20
  9.       validation-query: SELECT 1
  10.       filters: stat,slf4j
  11.       # 统计 SQL 执行情况
  12.       stat:
  13.         merge-sql: true
  14.         log-slow-sql: true
  15.         slow-sql-millis: 5000
  16.       web-stat-filter:
  17.         #不统计这些请求数据
  18.         exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
  19.       #访问监控网页的登录用户名和密码
  20.       stat-view-servlet:
  21.         enabled: true
  22.         url-pattern: /druid/*
  23.         login-username: light-druid
  24.         login-password: light-druid
  25. # MyBatis
  26. mybatis:
  27.   # 搜索指定包别名
  28.   type-aliases-package: com.light.**.entity
  29.   # 配置mapper的扫描,找到所有的mapper.xml映射文件
  30.   mapper-locations: classpath*:mapper/**/*Mapper.xml
  31.   # 加载全局的配置文件
  32.   configLocation: classpath:mybatis-config.xml
  33. logging:
  34.   level:
  35.     org.mybatis: debug
  36.     com.light.generator.mapper: debug
复制代码
四、创建shardingsphere-config.yml

在该设置文件中设置分库分表,设置参数参考解释,完备的设置示例请参考官网ShardingSphere-JDBC设置说明
  1. # ShardingSphere 配置模式,配置为 Standalone(独立模式)
  2. mode:
  3.   type: Standalone
  4.   repository:
  5.     type: JDBC # 使用 JDBC 作为注册中心,支持通过数据库持久化配置
  6. # 配置多个数据源 ds_0 和 ds_1
  7. dataSources:
  8.   # 数据源 ds_0 配置
  9.   ds_0:
  10.     dataSourceClassName: com.alibaba.druid.pool.DruidDataSource  # 使用 Druid 数据源连接池
  11.     driverClassName: com.mysql.cj.jdbc.Driver  # MySQL 驱动类
  12.     url: jdbc:mysql://localhost:3306/light-db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
  13.     # 数据库连接 URL,配置了字符编码、时区、是否使用 SSL
  14.     username: root  # 数据库用户名
  15.     password: 123456  # 数据库密码
  16.   # 数据源 ds_1 配置
  17.   ds_1:
  18.     dataSourceClassName: com.alibaba.druid.pool.DruidDataSource  # 使用 Druid 数据源连接池
  19.     driverClassName: com.mysql.cj.jdbc.Driver  # MySQL 驱动类
  20.     url: jdbc:mysql://localhost:3306/light-db_1?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
  21.     # 数据库连接 URL,配置了字符编码、时区、是否使用 SSL
  22.     username: root  # 数据库用户名
  23.     password: 123456  # 数据库密码
  24. # ShardingSphere 的分片规则
  25. rules:
  26.   - !SHARDING  # 启用分片规则
  27.     tables:
  28.       t_user:
  29.         # 配置 t_user 表的分片规则
  30.         actualDataNodes: ds_${0..1}.t_user  # 定义表的实际数据节点,ds_0 和 ds_1 分别表示两个数据源
  31.         databaseStrategy:
  32.           standard:
  33.             # 配置数据库的分片策略
  34.             shardingColumn: id  # 使用 id 列作为分片字段
  35.             shardingAlgorithmName: database_inline  # 使用 INLINE 算法进行分片
  36.         keyGenerateStrategy:
  37.           # 配置主键生成策略
  38.           column: id  # 主键列为 id
  39.           keyGeneratorName: snowflake  # 使用 Snowflake 算法生成主键
  40.     # 配置分库算法
  41.     shardingAlgorithms:
  42.       database_inline:
  43.         type: INLINE  # 使用 INLINE 算法
  44.         props:
  45.           algorithm-expression: ds_${id % 2}  # 分库算法,根据 id 字段的值做取余运算,分配到 ds_0 或 ds_1 数据源
  46.     # 配置主键生成算法
  47.     keyGenerators:
  48.       snowflake:
  49.         type: SNOWFLAKE  # 使用 Snowflake 算法生成全局唯一的 ID
  50.         props:
  51.           worker-id: 123  # 配置 Snowflake 算法的工作机器 ID,用于生成唯一的 ID
  52. # 配置一些全局属性
  53. props:
  54.   sql-show: true  # 是否显示 SQL 执行日志,设置为 true 时会在日志中输出 SQL
复制代码
完备项目结构


五、测试

在此通过insertUser和getUserList举行测试,具体测试代码请参考我的前章节内容 八.springboot集成mybatis+druid数据库毗连池


  • 测试新增用户

  • 测试查询

    此时检察2个数据库中就能看到刚刚测试添加的数据了
总结

在这篇实践中,我们使用了 ShardingSphere 配合 MyBatis 和 Druid 实现了分库分表的功能。通过设置,我们定义了分库分表策略、数据源。结合 MyBatis,我们可以在服务层举行 CRUD 操作,轻松管理数据。
这种方式不但提高了数据库的性能,还确保了数据的可扩展性,适用于大规模体系的构建。如果你有任何问题,欢迎在批评区留言。
ShardingSphere另有许多其他功能,比如数据加密、影子库、数据脱敏、读写分离等,具体说明请参考ShardingSphere官网介绍

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

商道如狼道

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表