基于Spring Boot 2.2.0 使用sharding-sphere + Mybatis-Plus 实现主从分离
1.Spring Boot 2.1.6 使用sharding-sphere + Mybatis-Plus 实现分库分表(一)
2.基于Spring Boot 2.2.0 使用sharding-sphere + Mybatis-Plus 实现主从分离(二)
菜鸟学习笔记,大佬请绕路,转载请标明出处
一、创建spring boot项目
这里springboot版本跟之前的不一样,不用在意。
1、pom文件如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>sharding-sphere2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>sharding-sphere2</name>
<description>基于Spring Boot 2.2.0 使用sharding-sphere + Mybatis-Plus 实现主从分离</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--Mybatis-Plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.1</version>
</dependency>
<!--shardingsphere start-->
<!-- for spring boot -->
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<!-- for spring namespace -->
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-namespace</artifactId>
<version>3.1.0</version>
</dependency>
<!--shardingsphere end-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2、项目结构图
2.1 总目录
2.2 实体类
2.3 dao层
2.4 service层
2.5 serviceImpl 层
2.6 controller 层
3、application.yml 文件配置
server:
port: 8061
#mybatis-plus映射mapper文件
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.shardingSphere2.entity
sharding:
jdbc:
datasource:
names: master1,salve0 #主从数据源
master1:
type: com.zaxxer.hikari.HikariDataSource
hikari:
driver-class-name: com.mysql.cj.jdbc.Driver #数据库新的驱动,下面连接url一定要加区时
jdbc-url: jdbc:mysql://localhost:3306/master1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
salve0:
type: com.zaxxer.hikari.HikariDataSource
hikari:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:3306/salve0?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
config: #读写分离配置
masterslave:
master-data-source-name: master1 #主数据库配置
slave-data-source-names: salve0 #从数据库配置(多个以逗号隔开)
load-balance-algorithm-type: round_robin # 提供轮询与随机(random),这里选择用轮询,
name: ms
props:
sql:
show: true #打印sql日志
spring:
main:
allow-bean-definition-overriding: true #设置为true,表示后发现的bean会覆盖之前相同名称的bean。
application:
name: sharing-sphere-server2
二、数据库结构
创建master1和salve0数据库,在各自数据库下创建user_info表,这里只是为了演示,所以只用了一个mysql数据库。
DROP TABLE IF EXISTS `user_info`;
CREATE TABLE `user_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
三、测试
1.启动项目
如图所示则表明已经启动成功了,因为只有配置了两个数据源,所以这里只有两个HikariPool
2、用postman向数据库添加数据
3、用postman查询数据
这里面要注意的是,由于演示没有真正配置主从数据传输,所以查不到数据,为了达到测试效果,只能手动到salve0添加一条数据。
总结:这里只是简单的实现,如有错误,希望大家给予批评指正。
项目地址:https://github.com/Breet1413/shardingsphere