# 创建 Spring Boot 程序
使用的是MyBatis-Plus
# 依赖
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
<version>5.1.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
# 配置
# properties
spring.application.name=sharging-jdbc-demo
#Memory为内存模式
spring.shardingsphere.mode.type=Memory
#打印sql
spring.shardingsphere.props.sql-show=true
#逻辑库名称
spring.shardingsphere.datasource.names=master,slave,slave2
#主数据源
#注意datasouce.库名是跟上面逻辑库一一对应
spring.shardingsphere.datasource.master.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.master.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.master.jdbc-url=jdbc:mysql://124.222.183.73:3306/db_user
spring.shardingsphere.datasource.master.username=root
spring.shardingsphere.datasource.master.password=123456
#从数据源1
spring.shardingsphere.datasource.slave.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.slave.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.slave.jdbc-url=jdbc:mysql://124.222.183.73:3306/db_user
spring.shardingsphere.datasource.slave.username=root
spring.shardingsphere.datasource.slave.password=123456
#从数据源2
spring.shardingsphere.datasource.slave2.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.slave2.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.slave2.jdbc-url=jdbc:mysql://124.222.183.73:3306/db_user
spring.shardingsphere.datasource.slave2.username=root
spring.shardingsphere.datasource.slave2.password=123456
#读取分离
#myds 解释,master,slave,slave2三个数据源节点组成的一个节点,他们的上级节点就是myds(自定义)
spring.shardingsphere.rules.readwrite-splitting.data-sources.myds.type=Static
#写数据源
spring.shardingsphere.rules.readwrite-splitting.data-sources.myds.props.write-data-source-name=master
#读数据源,多个逗号分割
spring.shardingsphere.rules.readwrite-splitting.data-sources.myds.props.read-data-source-names=slave,slave2
#负载均衡算法
# 负载均衡算法起的名字
spring.shardingsphere.rules.readwrite-splitting.data-sources.myds.load-balancer-name=alg_round
#算法具体配置(轮询)
spring.shardingsphere.rules.readwrite-splitting.load-balancers.alg_round.type=ROUND_ROBIN
# 实体对象
@TableName(value = "t_user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String uname;
public User(String uname) {
this.uname = uname;
}
}
# 测试
import com.example.shardingjdbc.entity.User;
import com.example.shardingjdbc.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.graphql.tester.AutoConfigureGraphQlTester;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class ShardingJdbcApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void readWrite() {
userMapper.insert(new User("张三"));
}
}
# 查看打印的日志
Logic 表示为逻辑库,ShardingJdbc会自动的找到主库并插入 Actual 表示最终插入的主库
2023-08-29 22:07:17.498 INFO 6084 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO t_user ( uname ) VALUES ( ? )
2023-08-29 22:07:17.498 INFO 6084 --- [ main] ShardingSphere-SQL : SQLStatement: MySQLInsertStatement(setAssignment=Optional.empty, onDuplicateKeyColumns=Optional.empty)
2023-08-29 22:07:17.498 INFO 6084 --- [ main] ShardingSphere-SQL : Actual SQL: master ::: INSERT INTO t_user ( uname ) VALUES ( ? ) ::: [李四]
← MYSQL 主从搭建 介绍 →