一、介绍
sharding-jdbc是轻量级的java框架,是增强版的JDBC驱动
sharding-jdbc并不是做分库分表,是操作多个库多个表
sharding-jdbc主要两个功能:数据分片和读写分离
sharding-jdbc目的是:简化对分库分表之后的数据相关操作
参考文档:
二、实操-使用sharding-jdbc操作水平分表
1、按照水平分表的方式,创建数据库和数据库表
1)创建数据库sharding_jdbc_user_db
2)在该数据库中创建两张表或多张表,这里分别是user_1、user_2
3)记录插入规则:根据主键id,如果主键id为偶数,将数据添加如user_1中;如果主键id为奇数,将数据添加到user_2中。
2、环境
Spring Boot、Mybatis-Plus、Sharding-JDBC、Druid连接池、Mysql
3、导入如下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.23</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.0.0-RC1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
4、配置sharding-jdbc分片策略
其他技术框架的配置在这里不描述,以下主要针对sharding-jdbc相关配置
这里一开始使用yml格式进行配置,建议使用properties格式配置,因为配置一旦多起来,yml很占位置。
spring:
#sharding-jdbc分片策略
shardingsphere:
datasource:
#配置数据源,给数据源起名称
names: m1
#配置数据源具体内容,包含连接池,驱动,地址,用户名和密码
m1:
type: com.alibaba.druid.pool.DruidDataSource
driver: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/sharding_jdbc_user_db?serverTimezone=GMT%2B8
username: root
password: root
sharding:
#指定user表分布情况,配置表在哪个数据库里面,表名称是什么
tables:
user:
actual-data-nodes: m1.user_$->{1..2}
#指定user表里面主键生成策略
key-generator:
column: uid
type: SNOWFLAKE
# 指定分片策略,约定uid值偶数添加到user_1表,如果cid是奇数添加到user_2,偶数添加到user_1中
table-strategy:
inline:
sharding-column: uid
algorithm-expression: user_$->{uid % 2 + 1}
#打开sql输出日志
props:
sql:
show: true
5、mode、mapper
@Data
@ToString
public class User {
private Long uid;
private String name;
private String tellphone;
}
@Repository
public interface UserMapper extends BaseMapper<User> {
}
6、测试
@SpringBootTest
@RunWith(SpringRunner.class)
public class Test01 {
@Resource
private UserMapper userMapper;
@Test
public void add(){
User user = new User();
user.setName("tom");
user.setTellphone("111");
for(int i=0; i<6; i++){
userMapper.insert(user);
}
}
}
7、执行出现如下错误
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true
以上是数据源问题(应该是datasource bean重复存在),加上提示的配置再重试即可。
8、效果,数据根据策略进入到了对应的表中
user_1:
user_2:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99681.html