https://github.com/Grrui/springboot-demo/tree/main/springboot-shardingsphere
https://shardingsphere.apache.org/document/current/cn/reference/encrypt
SpringBoot2.4.3 + JPA + Hikari + ShardingSphere实现读写分离
1.数据库表结构
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`age` int(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
2. 主要代码
2.1.配置文件设置
sharding.jdbc.datasource.names=master,slave
# master主库设置
sharding.jdbc.datasource.master.type=com.zaxxer.hikari.HikariDataSource
sharding.jdbc.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
sharding.jdbc.datasource.master.jdbc-url=jdbc:mysql://ip:port/database
sharding.jdbc.datasource.master.username=
sharding.jdbc.datasource.master.password=
# Slave从库设置
sharding.jdbc.datasource.slave.type=com.zaxxer.hikari.HikariDataSource
sharding.jdbc.datasource.slave.driver-class-name=com.mysql.cj.jdbc.Driver
sharding.jdbc.datasource.slave.jdbc-url=jdbc:mysql://ip:port/database
sharding.jdbc.datasource.slave.username=
sharding.jdbc.datasource.slave.password=
# 配置读写分离
sharding.jdbc.config.masterslave.name=ms
sharding.jdbc.config.masterslave.master-data-source-name=master
sharding.jdbc.config.masterslave.slave-data-source-names=slave
# 打印SQL,测试时可以看到SQL查询使用的DataSource
sharding.jdbc.config.props.sql.show=true
2.2.实体类
@Entity
@Data
@Table(name = "t_user")
public class UserDO {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer id;
String name;
Integer age;
public UserDO() {
}
public UserDO(String name, Integer age) {
this.name = name;
this.age = age;
}
}
2.3.Repo配置
@Repository
public interface UserRepo extends JpaRepository<UserDO, Integer> {
@Transactional
@Modifying
@Query(value = "update UserDO set age = :age where name = :name")
void updateAge(@Param("name") String name, @Param("age") Integer age);
UserDO findByName(String name);
}
到此就配置完了,可以使用起来了。我写了一个service+controller方便测试,代码如下:
2.4.Service
@Service
public class UserService {
@Autowired
UserRepo userRepo;
public void testUpdate(String name, Integer age) {
userRepo.updateAge(name, age);
}
public Integer testSelect(String name) {
return userRepo.findByName(name).getAge();
}
}
2.5.Controller
@RestController
@Slf4j
public class TestController {
@Autowired
UserService userService;
@GetMapping("/test")
public Integer testInsert() {
log.info("start update");
userService.testUpdate("zhangsan", (int) (Math.random() * 100));
log.info("start select");
return userService.testSelect("zhangsan");
}
}
3.测试
controller中会先进行写操作(修改年龄),然后进行读操作(读取修改后的年龄)
访问http://127.0.0.1:8080/test
后查看日志如下:
可以看到update操作落在了master数据源上,select操作落在slave数据源上。
相关推荐
docker_compose搭建shardingSphereProxyMysql主从读写分离
shardingsphere4.1.1版本主从读写分离组合数据脱敏功能demo
springboot+mybatis+druid+redis实现数据库读写分离和缓存
整合ELK、ShardingSphere读写分离、Redisson读写分离、消息队列等eladmin-main.zip 基于SpringCloud的企业级微服务多租户系统、多语言的脚手架, 代码组件化、高内聚低耦合,代码简介,注释丰富容易上手,该项目包括...
MySQL配置读写分离功能并实践,这个很牛逼的,不错的,可以学习
提高访问性能和系统可扩展性。通过将读取操作分配给专门负责读取的从库,可以将读取操作的负载分散到多个数据库实例,从而提升读取性能和系统的可扩展性
ShardingSphere:SpringBoot2+MybatisPlus+读写分离+分库分表 课程目标 快速的掌握读写分离+分表的实战,即插即用适用人群IT从业人员,开发人员,Java从业者,互联网从业者,性能调优人群课程简介 ShardingSphere是...
快速的掌握读写分离+分表的实战,即插即用适用人群IT从业人员,开发人员,Java从业者,互联网从业者,性能调优人群课程简介 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈。 它由Sharding-JDBC...
在应用层通过spring特性解决数据库读写分离代码
ShardingSphere实现分库 + 读写分离 有关ShardingSphere实现分库分表前面写了7篇博客作为该项目做详细说明。 1、 2、 3、 4、 5、 6、 7、 该项目拉下后配置数据库地址,和创建相应的库和表后就可以运行成功。 一、...
SpringBoot、Mybaits-Plus、Druid
ShardingSphere是开源分布式数据库中间件,核心功能是数据分片和读写分离。Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又...
他们均提供标准化的数据分片、读写分离、柔性事务和数据治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。Sharding-JDBC可以通过Java,YAML,Spring命名空间和Spring Boot Starter四种...
1、基于yml 配置方式 ,实现springBoot+sharding-jdbc+mybatis-plus 实现分库分表,读写分离,以及全局表,子表的配置。 2、实现mybatis-plus 整合到springboot 详细使用请看 测试用例
Sharding-Jdbc在springboot中配置
利用shardingsphere jdbc开发分库分表以及读写分离等应用时,经常需要参考的文档。
shardingsphere 4.1.1 SQLFeatureNotSupportedException: isValid 解决办法 替换如下两个JAR sharding-jdbc-orchestration-4.1.1.jar sharding-jdbc-core-4.1.1.jar 参考下下面链接,更改源码 ...
shardingsphere最完整的例子, 1Sharding-JDBC读写分离案例 2 Sharding-JDBC不分库,只分表例子 3 Spring Boot版 Sharding JDBC 垂直拆分(不同的表在不同的库中) 满足各种场景
shardingsphere-sharding-proxy,代理数据库,提供分库分表,读写分离功能,对mysql客户端与DBA友好
Sharding Sphere的所有使用过程,具体内容如下: 一、基本概念 1、什么是 Sharding Sphere 2、什么是分库分表 (1)水平切分和垂直切分 二、Sharding-JDBC 1、什么是 Sharding-JDBC ...3、使用 Sharding-Proxy 读写分离