## 功能概述
- 实现动态数据源的延迟加载机制,支持应用启动时只加载主库,从库按需动态加载和切换
- 从库配置存储在主库中,支持运行时灵活切换从库库名
- 使用现有的 @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} - 移除数据源
2.9 KiB
2.9 KiB
方法逻辑模板
元数据
- 需求编号:
- 创建时间:YYYY-MM-DD
- 创建人:
- 状态:进行中/已完成
方法概述
- 方法名称:
- 所属模块:
- 功能描述:
- 使用场景:
方法签名
// 方法签名示例
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:
- 步骤2:
- 步骤3:
- 步骤4:
- 步骤5:
逻辑分支
分支1:[条件描述]
- 触发条件:
- 执行逻辑:
- 预期结果:
分支2:[条件描述]
- 触发条件:
- 执行逻辑:
- 预期结果:
分支3:[条件描述]
- 触发条件:
- 执行逻辑:
- 预期结果:
边界条件
| 边界条件 | 处理逻辑 | 预期结果 |
|---|---|---|
| 条件1 | 处理逻辑1 | 结果1 |
| 条件2 | 处理逻辑2 | 结果2 |
| 条件3 | 处理逻辑3 | 结果3 |
算法设计(可选)
算法概述
[算法概述]
算法流程
[算法流程的可视化表示]
时间复杂度
[时间复杂度分析]
空间复杂度
[空间复杂度分析]
代码实现
// 完整的代码实现
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: