# 多数据源配置说明

## 配置概述

原有数据源配置保持不变，新增第二个MySQL数据源。两个数据库的表结构相同，只是数据库IP不同。

## 数据源配置位置

配置文件：`src/main/resources/application.yml`

### 原有数据源（保持不变）
- 使用 Spring Boot 自动配置
- Mapper扫描包：`cn.kk.spring_simple_operation.mapper`
- 默认连接：rm-wz9m4k931n87m9721oo.mysql.rds.aliyuncs.com:3306/visual

### 新增的第二数据源
- 配置前缀：`spring.datasource-secondary`
- Mapper扫描包：`cn.kk.spring_simple_operation.mapper.secondary`
- 配置类：`SecondaryDataSourceConfig`
- 当前连接：120.77.232.73:3306/java_visual

## 如何使用新增的第二数据源

### 1. 修改第二数据源配置（如需要）

编辑 `application.yml`，找到 `spring.datasource-secondary` 部分，修改为你的第二数据库信息：

```yaml
spring:
  datasource-secondary:
    url: jdbc:mysql://你的IP:端口/数据库名?useUnicode=true&characterEncoding=utf8&useSSL=true
    username: 你的用户名
    password: 你的密码
```

### 2. 创建第二数据源的Mapper接口

在 `cn.kk.spring_simple_operation.mapper.secondary` 包下创建Mapper接口：

```java
package cn.kk.spring_simple_operation.mapper.secondary;

import cn.kk.spring_simple_operation.entity.YourEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface YourEntityMapperSecondary extends BaseMapper<YourEntity> {
    // 自定义查询方法
}
```

**注意**：为了避免与原有Mapper冲突，建议在第二数据源的Mapper名称后加上 `Secondary` 后缀。

### 3. 在Service或Controller中使用

```java
@Service
public class YourService {

    @Autowired
    private YourEntityMapper originalMapper;  // 操作原有数据源

    @Autowired
    private YourEntityMapperSecondary secondaryMapper;  // 操作新增的第二数据源

    public void operateBothDataSources() {
        // 查询原有数据源
        List<YourEntity> originalData = originalMapper.selectList(null);

        // 查询新增的第二数据源
        List<YourEntity> secondaryData = secondaryMapper.selectList(null);

        // 插入到原有数据源
        YourEntity entity1 = new YourEntity();
        originalMapper.insert(entity1);

        // 插入到新增的第二数据源
        YourEntity entity2 = new YourEntity();
        secondaryMapper.insert(entity2);
    }
}
```

## 原有代码不受影响

- 原有的 Mapper 接口位置不变：`cn.kk.spring_simple_operation.mapper`
- 原有的 Service、Controller 代码无需修改
- 原有数据源的配置和连接方式保持不变

## 示例代码

参考 `MultiDataSourceController` 类，它展示了如何同时操作原有数据源和新增的第二数据源进行增删改查。

访问接口测试：
- `/multi-datasource/original/list` - 查询原有数据源
- `/multi-datasource/secondary/list` - 查询新增的第二数据源
- `/multi-datasource/original/insert` - 插入原有数据源
- `/multi-datasource/secondary/insert` - 插入新增的第二数据源

## 注意事项

1. 两个数据源的事务是独立的，不能跨数据源使用事务
2. 新增第二数据源的Mapper必须放在 `cn.kk.spring_simple_operation.mapper.secondary` 包下
3. Entity类可以共用，不需要重复创建
4. 如果需要自定义XML，需要在 `resources/mapper/secondary` 目录下创建
