交通局网站建设方案策划书,免费微网站案例,农家乐网站建设,合肥网站建设设计文章目录 前言一、引入依赖二、创建一个light-db_1备用数据库三、配置文件 application-dev.yml四、创建shardingsphere-config.yml完整项目结构 五、测试总结 前言
在现代化微服务架构中#xff0c;随着数据量的不断增长#xff0c;单一数据库已难以满足高可用性、扩展性和… 文章目录 前言一、引入依赖二、创建一个light-db_1备用数据库三、配置文件 application-dev.yml四、创建shardingsphere-config.yml完整项目结构 五、测试总结 前言
在现代化微服务架构中随着数据量的不断增长单一数据库已难以满足高可用性、扩展性和性能要求。ShardingSphere 提供了分库分表的能力帮助我们轻松实现水平拆分。本文将介绍如何在 Spring Boot 项目中结合 MyBatis 和 Druid实现分库分表的功能。 提示以下是本篇文章正文内容下面案例可供参考
一、引入依赖
在父项目中引入shardingsphere-jdbc依赖 dependencies {...implementation com.alibaba:druid-spring-boot-3-starter:1.2.24implementation com.mysql:mysql-connector-j:9.2.0implementation org.apache.shardingsphere:shardingsphere-jdbc:5.5.2}二、创建一个light-db_1备用数据库
创建一个light-db_1作为分库表结构和light-db一模一样
三、配置文件 application-dev.yml
上篇文章介绍使用mybatisdruid的时候是直接在datasource下配置了数据库连接参数这里我们将数据库配置文件放在单独的shardingsphere-config.yml专门进行分库分表的配置
spring:datasource:url: jdbc:shardingsphere:classpath:shardingsphere-config.ymldriver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriverdruid:initial-size: 5min-idle: 10max-active: 20validation-query: SELECT 1filters: stat,slf4j# 统计 SQL 执行情况stat:merge-sql: truelog-slow-sql: trueslow-sql-millis: 5000web-stat-filter:#不统计这些请求数据exclusions: *.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*#访问监控网页的登录用户名和密码stat-view-servlet:enabled: trueurl-pattern: /druid/*login-username: light-druidlogin-password: light-druid# MyBatis
mybatis:# 搜索指定包别名type-aliases-package: com.light.**.entity# 配置mapper的扫描找到所有的mapper.xml映射文件mapper-locations: classpath*:mapper/**/*Mapper.xml# 加载全局的配置文件configLocation: classpath:mybatis-config.xmllogging:level:org.mybatis: debugcom.light.generator.mapper: debug四、创建shardingsphere-config.yml
在该配置文件中配置分库分表配置参数参考注释完整的配置示例请参考官网ShardingSphere-JDBC配置说明
# ShardingSphere 配置模式配置为 Standalone独立模式
mode:type: Standalonerepository:type: JDBC # 使用 JDBC 作为注册中心支持通过数据库持久化配置# 配置多个数据源 ds_0 和 ds_1
dataSources:# 数据源 ds_0 配置ds_0:dataSourceClassName: com.alibaba.druid.pool.DruidDataSource # 使用 Druid 数据源连接池driverClassName: com.mysql.cj.jdbc.Driver # MySQL 驱动类url: jdbc:mysql://localhost:3306/light-db?useUnicodetruecharacterEncodingutf-8serverTimezoneAsia/ShanghaiuseSSLfalse# 数据库连接 URL配置了字符编码、时区、是否使用 SSLusername: root # 数据库用户名password: 123456 # 数据库密码# 数据源 ds_1 配置ds_1:dataSourceClassName: com.alibaba.druid.pool.DruidDataSource # 使用 Druid 数据源连接池driverClassName: com.mysql.cj.jdbc.Driver # MySQL 驱动类url: jdbc:mysql://localhost:3306/light-db_1?useUnicodetruecharacterEncodingutf-8serverTimezoneAsia/ShanghaiuseSSLfalse# 数据库连接 URL配置了字符编码、时区、是否使用 SSLusername: root # 数据库用户名password: 123456 # 数据库密码# ShardingSphere 的分片规则
rules:- !SHARDING # 启用分片规则tables:t_user:# 配置 t_user 表的分片规则actualDataNodes: ds_${0..1}.t_user # 定义表的实际数据节点ds_0 和 ds_1 分别表示两个数据源databaseStrategy:standard:# 配置数据库的分片策略shardingColumn: id # 使用 id 列作为分片字段shardingAlgorithmName: database_inline # 使用 INLINE 算法进行分片keyGenerateStrategy:# 配置主键生成策略column: id # 主键列为 idkeyGeneratorName: snowflake # 使用 Snowflake 算法生成主键# 配置分库算法shardingAlgorithms:database_inline:type: INLINE # 使用 INLINE 算法props:algorithm-expression: ds_${id % 2} # 分库算法根据 id 字段的值做取余运算分配到 ds_0 或 ds_1 数据源# 配置主键生成算法keyGenerators:snowflake:type: SNOWFLAKE # 使用 Snowflake 算法生成全局唯一的 IDprops:worker-id: 123 # 配置 Snowflake 算法的工作机器 ID用于生成唯一的 ID# 配置一些全局属性
props:sql-show: true # 是否显示 SQL 执行日志设置为 true 时会在日志中输出 SQL
完整项目结构 五、测试
在此通过insertUser和getUserList进行测试,具体测试代码请参考我的前章节内容 八.springboot集成mybatisdruid数据库连接池
测试新增用户 测试查询 此时查看2个数据库中就能看到刚刚测试添加的数据了
总结
在这篇实践中我们使用了 ShardingSphere 配合 MyBatis 和 Druid 实现了分库分表的功能。通过配置,我们定义了分库分表策略、数据源。结合 MyBatis我们可以在服务层进行 CRUD 操作轻松管理数据。
这种方式不仅提高了数据库的性能还确保了数据的可扩展性适用于大规模系统的构建。如果你有任何问题欢迎在评论区留言。
ShardingSphere还有很多其他功能比如数据加密、影子库、数据脱敏、读写分离等具体说明请参考ShardingSphere官网介绍