# 创建 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  ( ? ) ::: [李四]