datai/docs/method-logic/template.md
Kris b7163d555b feat: 实现动态数据源延迟加载功能 (2026-01-21-001)
## 功能概述
- 实现动态数据源的延迟加载机制,支持应用启动时只加载主库,从库按需动态加载和切换
- 从库配置存储在主库中,支持运行时灵活切换从库库名
- 使用现有的 @DataSource 注解进行数据源切换,业务代码无需修改

## 新增功能
- 动态数据源管理接口 IDynamicDataSourceManager
- 动态数据源服务接口 IDynamicDataSourceService
- 动态数据源服务实现 DynamicDataSourceServiceImpl
- 数据源管理控制器 DatasourceController
- 数据源配置表 sys_datasource_config

## 新增文档
- 需求文档: docs/requirements/2026-01-21-001-动态数据源延迟加载.md
- 设计文档: docs/design/2026-01-21-001-动态数据源延迟加载设计.md
- 决策记录: docs/decisions/2026-01-21-001-ADR-动态数据源延迟加载.md
- SQL 脚本: docs/sql/2026-01-21-001-sys_datasource_config.sql
- 提示词: docs/prompts/2026-01-21-001-动态数据源延迟加载代码生成提示词.md
- 会话记录: docs/sessions/2026-01-21-001-session.md
- 变更日志: docs/changelog/2026-01-21-001-changelog.md
- 复盘文档: docs/retros/2026-01-21-001-retro.md
- API 文档: docs/api-docs/2026-01-21-001-api.md
- 根目录变更日志: CHANGELOG.md

## 修改功能
- 扩展 DataSourceManager 类,添加动态数据源管理方法
- 扩展 SysDatasourceConfigMapper 接口,添加 selectSysDatasourceConfigByDsName 方法
- 更新项目索引和 Authentication.canvas

## 修复问题
- 修复循环依赖问题:创建 IDynamicDataSourceManager 接口解决 datai-system 和 datai-framework 互相依赖
- 修复导入错误:删除 DynamicDataSourceServiceImpl 中未使用的导入
- 修复异常处理:将 setFilters() 调用移到 try-catch 块内

## API 接口
- POST /system/datasource/loadSlave - 加载从库数据源
- POST /system/datasource/switchSlave/{dbName} - 切换从库库名
- GET /system/datasource/getSlaveConfig - 获取从库配置
- POST /system/datasource/switch/{dsName} - 切换数据源
- DELETE /system/datasource/{dsName} - 移除数据源
2026-01-21 18:24:24 +08:00

160 lines
2.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.

# 方法逻辑模板
## 元数据
- 需求编号:
- 创建时间YYYY-MM-DD
- 创建人:
- 状态:进行中/已完成
## 方法概述
- **方法名称**
- **所属模块**
- **功能描述**
- **使用场景**
## 方法签名
```java
// 方法签名示例
public ReturnType methodName(ParamType param1, ParamType param2) throws ExceptionType {
// 实现
}
```
## 参数说明
| 参数名 | 类型 | 必填 | 描述 | 默认值 | 示例值 |
| ------ | ---- | ---- | ---- | ------ | ------ |
| param1 | ParamType | 是 | 参数1描述 | - | value1 |
| param2 | ParamType | 否 | 参数2描述 | defaultValue | value2 |
## 返回值说明
| 类型 | 描述 | 示例值 |
| ---- | ---- | ------ |
| ReturnType | 返回值描述 | returnValue |
## 异常说明
| 异常类型 | 触发条件 | 描述 |
| ------ | ------ | ---- |
| ExceptionType1 | 条件1 | 异常1描述 |
| ExceptionType2 | 条件2 | 异常2描述 |
## 执行流程
### 流程图
```
[方法执行的流程图]
```
### 详细步骤
1. **步骤1**
2. **步骤2**
3. **步骤3**
4. **步骤4**
5. **步骤5**
## 逻辑分支
### 分支1[条件描述]
- **触发条件**
- **执行逻辑**
- **预期结果**
### 分支2[条件描述]
- **触发条件**
- **执行逻辑**
- **预期结果**
### 分支3[条件描述]
- **触发条件**
- **执行逻辑**
- **预期结果**
## 边界条件
| 边界条件 | 处理逻辑 | 预期结果 |
| ------ | ------ | ------ |
| 条件1 | 处理逻辑1 | 结果1 |
| 条件2 | 处理逻辑2 | 结果2 |
| 条件3 | 处理逻辑3 | 结果3 |
## 算法设计(可选)
### 算法概述
[算法概述]
### 算法流程
```
[算法流程的可视化表示]
```
### 时间复杂度
[时间复杂度分析]
### 空间复杂度
[空间复杂度分析]
## 代码实现
```java
// 完整的代码实现
public ReturnType methodName(ParamType param1, ParamType param2) throws ExceptionType {
// 实现逻辑
return result;
}
```
## 调用关系
### 调用该方法的组件
| 组件名称 | 调用场景 |
| ------ | ------ |
| 组件1 | 场景1 |
| 组件2 | 场景2 |
### 该方法调用的组件
| 组件名称 | 调用目的 |
| ------ | ------ |
| 组件1 | 目的1 |
| 组件2 | 目的2 |
## 测试用例
### 测试用例1正常情况
- **测试目标**
- **输入**
```
param1: value1
param2: value2
```
- **预期输出**
```
returnValue
```
### 测试用例2边界情况
- **测试目标**
- **输入**
```
param1: boundaryValue
```
- **预期输出**
```
expectedResult
```
### 测试用例3异常情况
- **测试目标**
- **输入**
```
param1: invalidValue
```
- **预期输出**
```
ExceptionType
```
## 优化建议
- 优化建议1
- 优化建议2
## 相关文档
- [需求文档](../requirements/YYYY-MM-DD-00X-需求名.md)
- [设计文档](../design/YYYY-MM-DD-00X-设计名.md)