Springboot 集成 Sharding-JDBC+Mybatis实现读写分离

发布时间:2026/10/31 10:56:18
Springboot 集成 Sharding-JDBC+Mybatis实现读写分离 一、前言Sharding-jdbc是开源的数据库操作中间件定位为轻量级Java框架在Java的JDBC层提供的额外服务。它使用客户端直连数据库以jar包形式提供服务无需额外部署和依赖可理解为增强版的JDBC驱动完全兼容JDBC和各种ORM框架。官方文档地址https://shardingsphere.apache.org/document/current/cn/overview/二、代码实战2.1 创建springboot项目本节用到的具体基础代码创建过程可以参考《Spring-Boot整合MyBatis》2.2 引入依赖dependencygroupIdorg.apache.shardingsphere/groupIdartifactIdsharding-jdbc-spring-boot-starter/artifactIdversion4.0.0-RC1/version/dependency2.3 修改application.ymlspring:main:allow-bean-definition-overriding:trueshardingsphere:props:sql:show:true#显示sqlsharding:default-data-source-name:ds1#配置默认数据源ds1 默认数据源,主要用于写.如果和masterslave节点都不配置则三个数据源都会当作salve在新增\修改\删除会报错masterslave:name:ms#配置主从名称master-data-source-name:ds1#置主库master,负责数据的写入slave-data-source-names:ds2,ds3#配置从库slave节点load-balance-algorithm-type:round_robin#配置slave节点的负载均衡均衡策略,采用轮询机制datasource:names:ds1,ds2,ds3#配置数据源ds1:#master-ds1数据库连接信息type:com.alibaba.druid.pool.DruidDataSourcedriver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://127.0.0.1:3306/springboot?useUnicodetruecharacterEncodingutf8serverTimezoneUTCallowMultiQueriestrueuseSSLfalseusername:springpassword:spring#123maxPoolSize:100minPoolSize:5ds2:#slave-ds2数据库连接信息type:com.alibaba.druid.pool.DruidDataSourcedriver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://127.0.0.1:3306/springboot?useUnicodetruecharacterEncodingutf8serverTimezoneUTCallowMultiQueriestrueuseSSLfalseusername:springpassword:spring#123maxPoolSize:100minPoolSize:5ds3:#slave-ds3数据库连接信息type:com.alibaba.druid.pool.DruidDataSourcedriver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://127.0.0.1:3306/springboot?useUnicodetruecharacterEncodingutf8serverTimezoneUTCallowMultiQueriestrueuseSSLfalseusername:springpassword:spring#123maxPoolSize:100minPoolSize:5Props的其他相关配置acceptor.size: # accept连接的线程数量,默认为cpu核数2倍executor.size: #工作线程数量最大默认值: 无限制max.connections.size.per.query: # 每个查询可以打开的最大连接数量,默认为1check.table.metadata.enabled: #是否在启动时检查分表元数据一致性默认值: falseproxy.frontend.flush.threshold: # proxy的服务时候,对于单个大查询,每多少个网络包返回一次proxy.transaction.type: # 默认LOCAL,proxy的事务模型 允许LOCAL,XA,BASE三个值,LOCAL无分布式事务,XA则是采用atomikos实现的分布式事务 BASE目前尚未实现proxy.opentracing.enabled: # 是否启用opentracingproxy.backend.use.nio: # 是否采用netty的NIO机制连接后端数据库,默认False ,使用epoll机制proxy.backend.max.connections: # 使用NIO而非epoll的话,proxy后台连接每个netty客户端允许的最大连接数量(注意不是数据库连接限制) 默认为8proxy.backend.connection.timeout.seconds: #使用nio而非epoll的话,proxy后台连接的超时时间,默认60s2.3 验证创建StudentController.javaRestControllerRequestMapping(/api/student)publicclassStudentController{AutowiredprivateStudentServicestudentService;GetMapping(/save)publicStringaddUser(){StudentsnewStudent();s.setName(wnonewRandom().nextInt());s.setSex(M);s.setSno(10000newRandom().nextInt());studentService.add(s);returnsuccess;}GetMapping(/findStudent)publicStudentfindUsers(intsno){returnstudentService.queryStudentBySno(sno);}}启动日志中三个数据源初始化成功调用 http://localhost:8080/api/student/save一直进入到ds1主节点调用 http://localhost:8080/api/student/findStudent?sno1一直进入到ds2、ds3节点并且轮询进入

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询