datai/docs/implementation/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

179 lines
3.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
- 创建人:
- 状态:进行中/已完成
## 实施方案概述
[实施方案概述]
## 实现范围
[实现范围描述]
## 设计依据
- [需求文档](../requirements/YYYY-MM-DD-00X-需求名.md)
- [设计文档](../design/YYYY-MM-DD-00X-设计名.md)
- [决策记录](../decisions/YYYY-MM-DD-00X-ADR-决策名.md)
## 技术栈
| 类别 | 技术 | 版本 | 用途 |
| ---- | ---- | ---- | ---- |
| 后端框架 | Spring Boot | 3.0 | 应用框架 |
| 数据库 | MySQL | 8.0 | 数据存储 |
| 缓存 | Redis | 7.0 | 缓存 |
## 实现准备
### 环境要求
- JDK 版本17
- Maven 版本3.8.6
- 开发工具IntelliJ IDEA
### 依赖安装
```xml
<!-- 示例依赖配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
```
### 工具准备
- 工具1
- 工具2
## 实现步骤
### 步骤 1[步骤名称]
- **目标**
- **执行内容**
1. 子步骤1
2. 子步骤2
- **关键代码**
```java
// 示例代码
public class Example {
public void method() {
// 实现
}
}
```
- **注意事项**
- 注意事项1
- 注意事项2
### 步骤 2[步骤名称]
- **目标**
- **执行内容**
1. 子步骤1
2. 子步骤2
- **关键代码**
```java
// 示例代码
```
- **注意事项**
- 注意事项1
- 注意事项2
### 步骤 3[步骤名称]
- **目标**
- **执行内容**
1. 子步骤1
2. 子步骤2
- **关键代码**
```java
// 示例代码
```
- **注意事项**
- 注意事项1
- 注意事项2
## 代码示例
### 核心功能实现
```java
// 核心功能代码示例
```
### 配置示例
```yaml
# 配置示例
spring:
datasource:
url: jdbc:mysql://localhost:3306/dbname
username: root
password: password
```
## 测试方法
### 单元测试
```java
// 单元测试示例
@SpringBootTest
public class ExampleTest {
@Test
public void testMethod() {
// 测试逻辑
}
}
```
### 集成测试
```java
// 集成测试示例
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class IntegrationTest {
@Test
public void testApi() {
// 测试逻辑
}
}
```
### 验证步骤
1. 验证点1
2. 验证点2
3. 验证点3
## 部署指南
### 部署环境
- 服务器配置:
- 操作系统:
- 网络配置:
### 部署步骤
1. 步骤1
2. 步骤2
3. 步骤3
### 部署脚本
```bash
# 部署脚本示例
#!/bin/bash
java -jar application.jar
```
## 维护指南
### 常见问题
| 问题 | 解决方案 |
| ---- | ------ |
| 问题1 | 解决方案1 |
| 问题2 | 解决方案2 |
### 日志管理
- 日志路径:
- 日志级别:
- 日志分析工具:
### 监控指标
- 指标1
- 指标2
## 相关文档
- [需求文档](../requirements/YYYY-MM-DD-00X-需求名.md)
- [设计文档](../design/YYYY-MM-DD-00X-设计名.md)