当前位置: 首页 > news >正文

ShardingJdbc实战-ShardingJdbc配置及读写分离

文章目录

  • 一、项目搭建
  • 二、测试结果
    • 1.访问http://localhost:8085/user/save
    • 2.访问http://localhost:8085/user/listuser


一、项目搭建

新建一个Spring Boot工程

在这里插入图片描述

引入依赖-sharding、ssm、数据库驱动

<properties><java.version>1.8</java.version><sharding-sphere.version>4.0.0-RC1</sharding-sphere.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 依赖mybatis和mysql驱动 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--依赖sharding--><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>${sharding-sphere.version}</version></dependency><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-core-common</artifactId><version>${sharding-sphere.version}</version></dependency><!--依赖数据源druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.21</version></dependency></dependencies>

定义配置yml

server:port: 8085
spring:main:allow-bean-definition-overriding: trueshardingsphere:# 参数配置,显示sqlprops:sql:show: true# 配置数据源datasource:# 给每个数据源取别名,下面的ds1,ds2,ds3任意取名字names: ds1,ds2,ds3# 给master-ds1每个数据源配置数据库连接信息ds1:# 配置druid数据源type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://master:port/ksd-sharding-db?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMTusername: rootpassword: 123456maxPoolSize: 100minPoolSize: 5# 配置ds2-slaveds2:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://slave1:port/ksd-sharding-db?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMTusername: rootpassword: 123456maxPoolSize: 10minPoolSize: 5# 配置ds3-slaveds3:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://slave2:port/ksd-sharding-db?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMTusername: rootpassword: 123456maxPoolSize: 10minPoolSize: 5# 配置默认数据源ds1sharding:# 默认数据源,主要用于写,注意一定要配置读写分离 ,注意:如果不配置,那么就会把三个节点都当做从slave节点,新增,修改和删除会出错。default-data-source-name: ds1# 配置数据源的读写分离,但是数据库一定要做主从复制masterslave:# 配置主从名称,可以任意取名字name: ms# 配置主库master,负责数据的写入master-data-source-name: ds1# 配置从库slave节点slave-data-source-names: ds2,ds3# 配置slave节点的负载均衡均衡策略,采用轮询机制load-balance-algorithm-type: round_robin
# 整合mybatis的配置XXXXX
mybatis:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.example.shardingjdbc.sharding.entity

定义mapper,entity,controller

  • entity
package com.example.shardingjdbc.sharding.entity;import lombok.Data;@Data
public class User {// 主键private Integer id;// 昵称private String nickname;// 密码private String password;// 性private Integer sex;// 性private String birthday;
}
  • mapper
package com.example.shardingjdbc.sharding.mapper;import com.example.shardingjdbc.sharding.entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;import java.util.List;public interface UserMapper {/*** @description 保存用户* @params [user]*/@Insert("insert into ksd_user(id,nickname,password,sex,birthday) values(#{id},#{nickname},#{password},#{sex},#{birthday})")void addUser(User user);/*** @description 查询用户* @params [user]*/@Select("select * from ksd_user")List<User> findUsers();
}
  • controller
package com.example.shardingjdbc.sharding.controller;import com.example.shardingjdbc.sharding.entity.User;
import com.example.shardingjdbc.sharding.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
import java.util.Random;@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserMapper userMapper;@GetMapping("/save")public String insert() {User user = new User();user.setId(new Random().nextInt());user.setNickname("zhangsan");user.setPassword("1234567");user.setSex(1);user.setBirthday("1988-12-03");userMapper.addUser(user);return "success";}@GetMapping("/listuser")public List<User> listuser() {return userMapper.findUsers();}
}

二、测试结果

三个源初始化成功
在这里插入图片描述

1.访问http://localhost:8085/user/save

代码如下(示例):
inert进入master数据源

2.访问http://localhost:8085/user/listuser

轮询查询数据库


相关文章:

  • [FT]chatglm2微调
  • 【C++从0到王者】第四十六站:图的深度优先与广度优先
  • STM32USART串口数据包
  • 字典树基础,朴素字符串查找
  • MySQL 用户账号迁移
  • 小白的matlab简单应用
  • 【打工日常】使用docker部署在线PDF工具
  • 基于MUSIC算法的六阵元圆阵DOA估计matlab仿真
  • 《TCP/IP详解 卷一》第9章 广播和组播
  • 【Linux C | 网络编程】套接字选项、getsockopt、setsockopt详解及C语言例子
  • MYSQL高级_目录
  • Windows的Docker-Desktop安装与问题总结
  • 2. 获取帮助(Getting Help)
  • 【JavaScript 漫游】【026】进度事件简记
  • Sora - 探索AI视频模型的无限可能
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • LeetCode18.四数之和 JavaScript
  • MySQL的数据类型
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 初探 Vue 生命周期和钩子函数
  • 工程优化暨babel升级小记
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #ubuntu# #git# repository git config --global --add safe.directory
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (LeetCode) T14. Longest Common Prefix
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (黑马C++)L06 重载与继承
  • (简单) HDU 2612 Find a way,BFS。
  • (力扣)循环队列的实现与详解(C语言)
  • (四)模仿学习-完成后台管理页面查询
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (状压dp)uva 10817 Headmaster's Headache
  • ****Linux下Mysql的安装和配置
  • ./configure、make、make install 命令
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET 的程序集加载上下文
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • @ComponentScan比较
  • @ModelAttribute使用详解
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [BT]BUUCTF刷题第4天(3.22)
  • [BT]BUUCTF刷题第9天(3.27)
  • [COI2007] Sabor
  • [github全教程]github版本控制最全教学------- 大厂找工作面试必备!
  • [JS入门到进阶] 前端开发不能写undefined?这是误区!
  • [leetcode] Balanced Binary Tree
  • [LeetCode] Binary Tree Preorder Traversal 二叉树的先序遍历
  • [python] `sys.settrace` 跟踪函数
  • [redis] Jedis 与 ShardedJedis 设计
  • [Unity3d for android]屏幕触摸事件
  • [Vuejs] 给ref赋值需要注意的问题