sharding-jdbc实现垂直分库
对 t_user的操作在数据库 user_db中进行
1、需求分析
2、创建数据库和表(略)
3、编写代码
(1)创建实体类User 和mapper
@Data @TableName("t_user") public class User { private Long userId; private String username; private String ustatus; } public interface UserMapper extends BaseMapper<User> { }
(2)配置垂直分库
#sharding-jdbc 分片策略
# 数据源名称,多数据源以逗号分隔
# 水平分库,所以要配置多数据源
spring.shardingsphere.datasource.names=m1,m2,m0
#一个实体类对应两张表
spring.main.allow-bean-definition-overriding=true
# 第一个数据源
# 数据库连接池
spring.shardingsphere.datasource.m1.type=com.alibaba.druid.pool.DruidDataSource
#数据库驱动类名
spring.shardingsphere.datasource.m1.driver-class-name= com.mysql.cj.jdbc.Driver
# 数据库 URL 连接
spring.shardingsphere.datasource.m1.url=jdbc:mysql://localhost:3306/edu_db_1?serverTimezone=GMT%2B8
# 数据库用户名
spring.shardingsphere.datasource.m1.username= root
# 数据库密码
spring.shardingsphere.datasource.m1.password=houchen
# 第二个数据源
# 数据库连接池
spring.shardingsphere.datasource.m2.type=com.alibaba.druid.pool.DruidDataSource
#数据库驱动类名
spring.shardingsphere.datasource.m2.driver-class-name= com.mysql.cj.jdbc.Driver
# 数据库 URL 连接
spring.shardingsphere.datasource.m2.url=jdbc:mysql://localhost:3306/edu_db_2?serverTimezone=GMT%2B8
# 数据库用户名
spring.shardingsphere.datasource.m2.username= root
# 数据库密码
spring.shardingsphere.datasource.m2.password=houchen
# 第三个数据源
# 数据库连接池
spring.shardingsphere.datasource.m0.type=com.alibaba.druid.pool.DruidDataSource
#数据库驱动类名
spring.shardingsphere.datasource.m0.driver-class-name= com.mysql.cj.jdbc.Driver
# 数据库 URL 连接
spring.shardingsphere.datasource.m0.url=jdbc:mysql://localhost:3306/user_db?serverTimezone=GMT%2B8
# 数据库用户名
spring.shardingsphere.datasource.m0.username= root
# 数据库密码
spring.shardingsphere.datasource.m0.password=houchen
#配置user_db数据库里面 t_user 专库专表
spring.shardingsphere.sharding.tables.t_user.actual-data-nodes=m$->{0}.t_user
#指定 t_user 表中主键的生成策略 SNOWFLAKE:雪花算法
spring.shardingsphere.sharding.tables.t_user.key-generator.column = user_Id
spring.shardingsphere.sharding.tables.t_user.key-generator.type =SNOWFLAKE
#打开sql的输出日志
spring.shardingsphere.props.sql.show = true
(3)测试
//测试垂直分库 @Test public void testUserDB(){ User user =new User(); user.setUsername("luccy"); user.setUstatus("c"); userMapper.insert(user); }