Spring Boot 和 MySQL 主从配置指南
在现代的应用系统中,使用主从数据库可以有效地提高应用的可用性与性能。接下来,我们将详细讲解如何在 Spring Boot 中与 MySQL 配置主从关系。整个过程分为几个步骤,下面我们用表格进行展示。
流程步骤
步骤 | 描述 |
---|---|
1 | 准备 MySQL 主从环境 |
2 | 配置 MySQL 主从参数 |
3 | 在 Spring Boot 项目中添加依赖 |
4 | 配置数据源 |
5 | 编写 DAO 层代码 |
6 | 测试主从读写分离功能 |
接下来我们逐步深入每一个步骤。
1. 准备 MySQL 主从环境
首先,你需要两台 MySQL 实例,一台作为主库,另一台作为从库。确保它们都能正常访问,并已启动,并且有相同的版本。
2. 配置 MySQL 主从参数
在主库的配置文件(一般是 my.cnf
)中,添加以下内容:
[mysqld]
server-id=1 # 主库的server-id, 必须唯一
log-bin=mysql-bin # 启用二进制日志
在从库的配置文件(同样是 my.cnf
)中,添加以下内容:
[mysqld]
server-id=2 # 从库的server-id, 必须唯一
relay-log=mysql-relay-bin # 启用中继日志
然后重启 MySQL 服务,并在主库中执行如下命令以记录主库状态:
SHOW MASTER STATUS;
记下输出的 File
和 Position
值,这将在从库上配置时使用。
在从库中,执行以下命令以实现数据复制:
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='复制用户',
MASTER_PASSWORD='复制用户密码',
MASTER_LOG_FILE='记录的File',
MASTER_LOG_POS=记录的Position;
最后,启动复制进程:
START SLAVE;
3. 在 Spring Boot 项目中添加依赖
在 pom.xml
中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql:mysql-connector-java</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
4. 配置数据源
在 application.yml
中配置主从数据源:
spring:
datasource:
# 主库的配置
primary:
url: jdbc:mysql://主库IP:3306/数据库名
username: 主库用户名
password: 主库密码
driver-class-name: com.mysql.cj.jdbc.Driver
# 从库的配置
replica:
url: jdbc:mysql://从库IP:3306/数据库名
username: 从库用户名
password: 从库密码
driver-class-name: com.mysql.cj.jdbc.Driver
# 配置动态数据源
dynamic-datasource:
primary: primary # 指定主库为初始数据源
接下来,在代码中配置数据源。
5. 编写 DAO 层代码
使用 @Primary
注解标记主库的 DataSource
,在 DAO 中加入读写分离的逻辑:
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "primaryDataSource")
@ConfigurationProperties("spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "replicaDataSource")
@ConfigurationProperties("spring.datasource.replica")
public DataSource replicaDataSource() {
return DataSourceBuilder.create().build();
}
}
这是将主库和从库的数据源注册到 Spring 上下文中的代码。
6. 测试主从读写分离功能
在你的服务层中,可以创建一个简单的 API 进行测试。比如:
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User getUserById(Long id) {
return userRepository.findById(id); // 从从库读取数据
}
@Transactional
public User createUser(User user) {
return userRepository.save(user); // 在主库写入数据
}
}
测试结果
在 Postman 或其他工具中,你可以分别测试读取和写入 API,确保数据能够在主库写入后在从库中读取到。
甘特图
下面是实施项目的甘特图:
gantt
title MySQL 主从配置实施时间表
dateFormat YYYY-MM-DD
section 准备阶段
准备 MySQL 实例 :a1, 2023-10-01, 2d
section 配置阶段
配置 MySQL 主库参数 :a2, after a1, 1d
配置 MySQL 从库参数 :a3, after a2, 1d
section 开发阶段
添加 Spring Boot 依赖 :a4, after a3, 1d
编写配置和DAO代码 :a5, after a4, 2d
section 测试阶段
测试主从读写分离功能 :a6, after a5, 1d
旅行图
下面是整个过程的旅行图:
journey
title MySQL 主从配置过程
section 准备阶段
准备 MySQL 主从环境 : 5: 二号用户
section 配置阶段
配置 MySQL 主从参数 : 4: 一号用户
section 开发阶段
添加 Spring Boot 依赖 : 5: 二号用户
编写 DAO 层代码 : 4: 一号用户
section 测试阶段
测试功能 : 5: 二号用户
结语
通过以上六个步骤,你就能够成功配置 Spring Boot 与 MySQL 主从数据库的读写分离。这种架构在提高数据读写性能和系统稳定性方面有着显著的优势。希望以上内容能够帮助你顺利完成任务,享受开发过程中的乐趣!如果你在实现过程中有任何问题,请不要犹豫,随时提问。