在此之前需要搭建mysql集群,可以看看下面两篇文章,随意选择一个搭建即可。
官方文档地址:ShardingSphere
选择自己的版本,我选的是5.1.1
1.引入依赖
<dependencies>
<!--测试相关依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.19</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>2.5.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--sharding依赖-->
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
<version>5.1.1</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
<scope>runtime</scope>
</dependency>
</dependencies>
2.在写数据库建表
create table user
(
id int not null
primary key,
name varchar(255) not null
);
3.实体类
public class User {
private String name;
private int id;
public User() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
4.mapper
public interface UserMapper {
@Insert("INSERT INTO user (id,name) values (#{id},#{name})")
int insert(User record);
@Select("SELECT * from user")
List<User> selectByPrimaryKey();
}
5.配置文件(yml格式)
spring:
shardingsphere:
mode:
type: Memory # 有集群,单机,内存。自己学习用内存模式即可
datasource:
names: master,slave0,slave1 #每个数据源的名称
master:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.6.128:9906/test?allowPublicKeyRetrieval=true
username: root
password: 123456
slave0:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.6.128:9907/test?allowPublicKeyRetrieval=true
username: root
password: 123456
slave1:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.6.128:9908/test?allowPublicKeyRetrieval=true
username: root
password: 123456
rules:
readwrite-splitting: #读写分离规则
data-sources:
ms: # 自定义名称,随便写
type: Static #因为上面配置的数据库信息是死的,所以是Static
props:
write-data-source-name: master #写的数据源名称
read-data-source-names: slave0,slave1 #读的数据眼名称
load-balancer-name: round-robin # 自定义负载均衡算法名称
load-balancers:
round-robin: # 和自己写的自定义负载均衡算法名称一致
type: ROUND_ROBIN # 负载均衡算法类型,看文档选自己喜欢的
props:
sql-show: true # 显示Sql
6.测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Sharding.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) //classes是主类的启动名称
public class MyTest {
@Autowired
UserMapper userMapper;
@Test
public void saveGet() {
User user = new User();
user.setId(3);
user.setName("测试");
List<User> users = userMapper.selectByPrimaryKey();
System.out.println("插入前user表大小:"+users.size());
userMapper.insert(user);
List<User> users1 = userMapper.selectByPrimaryKey();
System.out.println("插入后user表大小:"+users1.size());
}
}