datai/docs/reference-code/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

140 lines
2.0 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
- 创建人:
- 版本1.0.0
## 代码概述
- **代码名称**
- **功能描述**
- **所属领域**
- **技术栈**
## 应用场景
[代码的适用场景描述]
## 核心设计
### 设计思路
[设计思路描述]
### 架构设计
```
[代码架构的可视化表示]
```
### 关键算法
[关键算法描述]
### 设计模式应用
| 设计模式 | 用途 | 实现位置 |
| ------ | ---- | ------ |
| 模式1 | 用途1 | 类/方法 |
| 模式2 | 用途2 | 类/方法 |
## 代码实现
### 目录结构
```
[代码目录结构]
```
### 核心代码
#### 类 1[类名]
```java
// 核心类实现
public class ExampleClass {
// 类注释
// 成员变量
private String field;
// 构造方法
public ExampleClass(String field) {
this.field = field;
}
// 核心方法
public void coreMethod() {
// 实现逻辑
}
}
```
#### 类 2[类名]
```java
// 另一个核心类实现
```
### 配置文件
```yaml
# 配置文件示例
```
## 使用示例
### 基本使用
```java
// 基本使用示例
ExampleClass example = new ExampleClass("value");
example.coreMethod();
```
### 高级使用
```java
// 高级使用示例
```
### 常见使用场景
#### 场景 1[场景描述]
```java
// 场景1的代码示例
```
#### 场景 2[场景描述]
```java
// 场景2的代码示例
```
## 最佳实践
### 代码组织
- 实践1
- 实践2
### 性能优化
- 优化1
- 优化2
### 安全性考虑
- 安全措施1
- 安全措施2
## 注意事项
### 使用限制
- 限制1
- 限制2
### 潜在问题
| 问题 | 解决方案 |
| ---- | ------ |
| 问题1 | 解决方案1 |
| 问题2 | 解决方案2 |
### 维护和扩展建议
- 建议1
- 建议2
## 相关资源
- [相关文档链接]
- [参考资料链接]
- [示例项目链接]
## 相关文档
- [需求文档](../requirements/YYYY-MM-DD-00X-需求名.md)
- [设计文档](../design/YYYY-MM-DD-00X-设计名.md)