# 实现MySQL主从Spring Boot教程

在开发中,为了提高系统的可用性和性能,通常会使用MySQL主从架构来实现数据的读写分离。本教程将教你如何在Spring Boot应用中实现MySQL主从架构,让数据的读写分别由主库和从库来处理。

## 整体流程

下面是实现MySQL主从Spring Boot的整体流程:

| 步骤 | 描述 |
| ------ | ------ |
| 1 | 配置主从MySQL数据库服务器 |
| 2 | 创建Spring Boot项目 |
| 3 | 配置主从数据库连接 |
| 4 | 编写数据访问层代码 |
| 5 | 测试主从切换功能 |

## 详细步骤

### 1. 配置主从MySQL数据库服务器

首先,在MySQL数据库服务器上设置主从结构。确保主库和从库都已设置好,并且从库已正确连接到主库并成功同步数据。

### 2. 创建Spring Boot项目

在你的集成开发环境(IDE)中创建一个新的Spring Boot项目。可以直接在Spring Initializr中创建一个新的Spring Boot项目,包括所需的依赖。

### 3. 配置主从数据库连接

在`application.properties`(或`application.yml`)文件中配置主从数据库连接信息:

```properties
# 主数据库配置
spring.datasource.master.url=jdbc:mysql://主库IP:3306/数据库名
spring.datasource.master.username=主库用户名
spring.datasource.master.password=主库密码

# 从数据库配置
spring.datasource.slave.url=jdbc:mysql://从库IP:3306/数据库名
spring.datasource.slave.username=从库用户名
spring.datasource.slave.password=从库密码
```

### 4. 编写数据访问层代码

创建数据访问层(DAO)并在代码中指定使用主库或从库连接。可以使用`@Primary`和`@Qualifier`注解来指定使用主库或从库。

```java
@Repository
public class UserRepository {

@Autowired
@Qualifier("masterDataSource")
private DataSource masterDataSource;

@Autowired
@Qualifier("slaveDataSource")
private DataSource slaveDataSource;

public void save(User user) {
// 保存数据到主库
// 使用masterDataSource进行数据库操作
}

public User findById(Long id) {
// 从从库读取数据
// 使用slaveDataSource进行数据库查询
return null;
}
}
```

### 5. 测试主从切换功能

编写一个Controller来测试主从切换功能,可以通过调用不同的接口来验证数据是从主库还是从库读取的。

```java
@RestController
public class UserController {

@Autowired
private UserRepository userRepository;

@GetMapping("/save")
public String saveUser() {
User user = new User();
user.setId(1L);
user.setName("Alice");

userRepository.save(user);
return "User saved to master database";
}

@GetMapping("/find/{id}")
public String findUser(@PathVariable Long id) {
User user = userRepository.findById(id);
return "User " + user.getName() + " found in slave database";
}
}
```

在上述步骤完成后,你就成功地实现了MySQL主从Spring Boot架构。你可以通过调用不同的接口来测试主从切换功能,验证数据是从主库还是从库读取的。

希望本教程对你有所帮助,祝你顺利实现MySQL主从Spring Boot架构!