datai/docs/archive/api-docs/setting/DataiConfigEnvironmentController/0009-init-slave-datasource.md

213 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 接口文档
## 接口信息
- **接口名称**: 初始化环境从库
- **接口路径**: /setting/environment/initSlave
- **请求方法**: POST
- **模块归属**: datai-salesforce-setting
- **版本号**: v1.0
- **创建日期**: 2026-01-24
- **最后更新**: 2026-01-24
## 功能描述
为指定的环境初始化从库数据源。该接口会从配置文件读取主库配置自动生成从库名称slave_环境编码创建数据库写入数据源配置表注册数据源到 DataSourceManager并验证连接有效性。从库一经创建不允许任何修改、删除或重新初始化。
## 请求参数
### 请求参数
| 参数名 | 类型 | 必填 | 描述 | 示例 | 默认值 |
|--------|------|------|------|------|--------|
| environmentId | Long | 是 | 环境ID | 1 | - |
**参数说明**:
- `environmentId`: 要初始化从库的环境ID必须是已存在的环境
## 响应数据
### 成功响应
**HTTP 状态码**: 200 OK
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"id": 1,
"dsName": "PROD",
"dbName": "slave_PROD",
"dbHost": "localhost",
"dbPort": 3306,
"dbType": "mysql",
"username": "root",
"password": "******",
"status": "0",
"createBy": "admin",
"createTime": "2026-01-24 10:00:00",
"updateBy": "admin",
"updateTime": "2026-01-24 10:00:00"
}
}
```
| 字段名 | 类型 | 描述 | 示例 |
|--------|------|------|------|
| code | Integer | 响应码 | 200 |
| msg | String | 响应消息 | 操作成功 |
| data | Object | 创建的数据源配置详细信息 | - |
**data 对象字段说明**:
| 字段名 | 类型 | 描述 | 示例 |
|--------|------|------|------|
| id | Long | 数据源ID | 1 |
| dsName | String | 数据源名称(环境编码) | PROD |
| dbName | String | 数据库名称 | slave_PROD |
| dbHost | String | 数据库主机地址 | localhost |
| dbPort | Integer | 数据库端口 | 3306 |
| dbType | String | 数据库类型 | mysql |
| username | String | 数据库用户名 | root |
| password | String | 数据库密码(加密) | ****** |
| status | String | 状态0-正常1-停用) | 0 |
| createBy | String | 创建人 | admin |
| createTime | String | 创建时间 | 2026-01-24 10:00:00 |
| updateBy | String | 更新人 | admin |
| updateTime | String | 更新时间 | 2026-01-24 10:00:00 |
### 失败响应
**HTTP 状态码**: 400/401/403/500
```json
{
"code": 500,
"msg": "数据源名称已存在PROD",
"data": null
}
```
| 错误码 | 错误信息 | 描述 |
|--------|----------|------|
| 400 | 参数错误 | 参数验证失败 |
| 401 | 您没有权限执行此操作 | 权限不足 |
| 403 | 访问被拒绝 | 访问被拒绝 |
| 500 | 数据源名称已存在:{环境编码} | 数据源已存在 |
| 500 | 主库配置不存在 | 主库配置不存在 |
| 500 | 数据库操作失败:{错误信息} | 数据库操作失败 |
| 500 | 数据源配置写入失败 | 数据源配置写入失败 |
| 500 | 数据源连接验证失败 | 数据源连接验证失败 |
## 接口示例
### 请求示例
```bash
curl -X POST "http://localhost:8080/setting/environment/initSlave" \
-H "Authorization: Bearer [token]" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "environmentId=1"
```
### 响应示例
**成功**:
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"id": 1,
"dsName": "PROD",
"dbName": "slave_PROD",
"dbHost": "localhost",
"dbPort": 3306,
"dbType": "mysql",
"username": "root",
"password": "******",
"status": "0"
}
}
```
**失败**:
```json
{
"code": 500,
"msg": "数据源名称已存在PROD",
"data": null
}
```
## 错误处理
1. **权限验证失败**: 检查用户是否具有 setting:environment:initSlave 权限
2. **参数验证失败**: 检查必填参数是否完整,参数格式是否正确
3. **主库配置不存在**: 检查 application-druid.yml 中是否配置了主库信息
4. **数据源已存在**: 检查数据源名称是否已存在,如已存在则返回错误
5. **数据库创建失败**: 检查数据库连接和权限,记录错误日志并返回错误信息
6. **数据源配置写入失败**: 检查数据库连接和权限,记录错误日志并返回错误信息
7. **数据源连接验证失败**: 检查数据源配置和连接,记录错误日志并返回错误信息
8. **系统错误**: 记录错误日志并返回通用错误信息
## 注意事项
1. 接口需要登录认证,需要携带有效的 token
2. 接口需要 setting:environment:initSlave 权限
3. 环境编码为必填项
4. 从库名称自动生成为 slave_环境编码
5. 数据库字符集为 utf8mb4排序规则为 utf8mb4_general_ci
6. 从库一经创建,不允许任何修改、删除或重新初始化
7. 使用 Spring 事务保证原子性,验证失败时自动回滚
8. 初始化操作会记录到操作日志中
9. 初始化成功后会返回创建的数据源配置信息
10. 主库配置从 application-druid.yml 配置文件中读取
11. 初始化过程包括:创建数据库、写入配置、注册数据源、切换到从库、验证连接、切换回主库
12. 建议在初始化前先查询确认环境信息
## 相关接口
- [查询配置环境列表](0001-environment-list.md) - 查询配置环境列表
- [获取配置环境详细信息](0003-get-info.md) - 获取单个环境的详细信息
- [切换当前环境](0007-switch-environment.md) - 切换当前环境
- [获取当前激活的环境](0008-get-current-environment.md) - 获取当前激活的环境
## 实现细节
1. 接收环境ID参数
2. 根据环境ID查询环境信息
3. 从环境信息中获取环境编码
4. 调用 IDataiConfigEnvironmentService 的 initSlaveDatasource 方法
5. 从 application-druid.yml 配置文件中读取主库配置
6. 生成从库名称slave_环境编码
7. 检查数据源名称是否已存在
8. 使用 JDBC 创建数据库字符集utf8mb4排序规则utf8mb4_general_ci
9. 写入数据源配置表
10. 注册数据源到 DataSourceManager
11. 切换到从库并验证连接有效性
12. 切换回主库
13. 使用 Spring 事务保证原子性,验证失败时自动回滚
14. 返回创建的数据源配置信息
## 测试信息
### 测试环境
- **环境**: 本地开发环境
- **版本**: v1.0
### 测试用例
| 测试场景 | 输入参数 | 预期结果 | 实际结果 | 状态 |
|----------|----------|----------|----------|------|
| 初始化生产环境从库 | environmentId=1 | 初始化成功 | 初始化成功 | 通过 |
| 初始化测试环境从库 | environmentId=2 | 初始化成功 | 初始化成功 | 通过 |
| 初始化已存在的从库 | environmentId=1已存在 | 返回数据源已存在 | 返回数据源已存在 | 通过 |
| 初始化不存在的环境 | environmentId=999 | 返回错误 | 返回错误 | 通过 |
| 缺少必填参数 | 缺少environmentId | 返回参数错误 | 返回参数错误 | 通过 |
| 无权限访问 | 无权限token | 返回401错误 | 返回401错误 | 通过 |