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数据源上。
相关推荐
本项目以"springboot+mybatis-plus+shardingsphere 实现读写分离"为主题,结合了Spring Boot的快速开发能力、MyBatis-Plus的简化数据操作以及ShardingSphere的分布式数据库解决方案,旨在提高系统的读取性能和可扩展...
docker_compose搭建shardingSphereProxyMysql主从读写分离
ShardingSphere是一款开源的分布式数据库中间件,它提供了包括数据分片、读写分离、数据库事务和数据安全等核心功能。在这个"shardingsphere4.1.1版本主从读写分离组合数据脱敏功能demo"中,我们将探讨如何在实际...
在现代Web应用开发中,数据库读写分离和缓存技术是提高系统性能和可扩展性的关键策略。本项目采用SpringBoot、MyBatis、Druid和Redis这四个核心技术来实现这一目标。以下将详细讲解这些组件如何协同工作,以及它们...
在IT行业中,数据库读写分离是一种常见的优化策略,它能够有效地提高系统的并发处理能力和响应速度。Sharding-JDBC是阿里巴巴开源的一款轻量级Java框架,它可以在不改变业务代码的前提下,帮助我们快速实现数据库的...
整合ELK、ShardingSphere读写分离、Redisson读写分离、消息队列等eladmin-main.zip 基于SpringCloud的企业级微服务多租户系统、多语言的脚手架, 代码组件化、高内聚低耦合,代码简介,注释丰富容易上手,该项目包括...
在现代企业级应用中,数据库读写分离是一种常见的优化策略,它可以提高系统的读取性能,减轻主数据库的压力,保证数据的稳定性和可用性。Spring框架提供了丰富的特性来支持这一实践,使得开发者能够在应用层轻松实现...
ShardingSphere:SpringBoot2+MybatisPlus+读写分离+分库分表 课程目标 快速的掌握读写分离+分表的实战,即插即用适用人群IT从业人员,开发人员,Java从业者,互联网从业者,性能调优人群课程简介 ShardingSphere是...
快速的掌握读写分离+分表的实战,即插即用适用人群IT从业人员,开发人员,Java从业者,互联网从业者,性能调优人群课程简介 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈。 它由Sharding-JDBC...
《使用ShardingJDBC5.1.1实现按月分库分表、读写分离与自动创表的全面实战》 在现代企业级应用中,数据量的快速增长使得数据库的性能优化成为至关重要的环节。ShardingJDBC作为一款轻量级的Java框架,能够有效地...
而ShardingSphere作为一个开源的数据分片、分布式数据库中间件,提供了数据分片、读写分离、数据库治理等功能,极大地提升了大数据处理的能力。在本项目中,我们采用的是ShardingSphere 5.4.1版本,该版本对性能进行...
ShardingSphere实现分库 + 读写分离 有关ShardingSphere实现分库分表前面写了7篇博客作为该项目做详细说明。 1、 2、 3、 4、 5、 6、 7、 该项目拉下后配置数据库地址,和创建相应的库和表后就可以运行成功。 一、...
ShardingSphere 提供了灵活的读写分离机制,支持基于主从复制、读写分离和负载均衡等多种读写分离策略。ShardingSphere 的读写分离机制可以满足各种业务场景的需求,帮助开发者解决数据库性能和高可用性问题。
### Sharding-JDBC 教程:Spring Boot 整合 Sharding-JDBC 实现读写分离 #### 一、Sharding-JDBC 和 Spring Boot 的简介 **Sharding-JDBC** 是阿里巴巴开源的一个轻量级 Java 框架,主要用于对数据库进行分片、...
Spring Boot 中整合 Sharding-JDBC 读写分离示例解析 本文主要介绍了在 Spring Boot 框架中如何整合 Sharding-JDBC 实现读写分离的示例。Sharding-JDBC 是一个开源的数据库中间件,提供了数据分片、读写分离、...
Sharding-JDBC是Apache ShardingSphere项目的一部分,它作为一个Java库,无需额外中间件,可以直接嵌入到现有应用中,提供透明化的数据分片和读写分离功能。它支持多种数据库类型,包括MySQL、Oracle、SQL Server等...
【标题】"基于mybatis,springboot开箱即用的读写分离插件.zip" 提供了一个集成mybatis和springboot的解决方案,旨在简化数据库读写分离的实现过程。这个插件使得开发者能够快速地在自己的应用中部署读写分离功能,...
这部分可能详细阐述了ShardingSphere的读写分离实现方式,包括读写路由规则、主从延迟问题的处理、以及在复杂业务场景下的读写分离策略。 **六、源码解析** ShardingSphere的源码提供了深入理解其工作原理的机会。...
ShardingSphere是开源分布式数据库中间件,核心功能是数据分片和读写分离。Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又...