## 功能概述
- 实现动态数据源的延迟加载机制,支持应用启动时只加载主库,从库按需动态加载和切换
- 从库配置存储在主库中,支持运行时灵活切换从库库名
- 使用现有的 @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} - 移除数据源
4.4 KiB
4.4 KiB
SQL 文档模板
元数据
- 需求编号:
- 创建时间:YYYY-MM-DD
- 创建人:
- 版本:1.0.0
- 文档类型:数据库设计文档/SQL查询文档/存储过程文档/数据流程文档
数据库基本信息
- 数据库系统:MySQL/PostgreSQL/Oracle/其他
- 数据库名称:
- 版本:
- 环境:开发/测试/生产
文档概述
- 文档目标:
- 适用范围:
- 使用对象:
数据库结构
数据库关系图
[数据库表关系的可视化表示]
表结构
表 1:[表名]
- 描述:
- 表结构:
字段名 数据类型 约束 默认值 描述 id BIGINT PRIMARY KEY, AUTO_INCREMENT - 主键 name VARCHAR(50) NOT NULL - 名称 create_time DATETIME NOT NULL CURRENT_TIMESTAMP 创建时间 update_time DATETIME NOT NULL CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 更新时间 - 索引:
索引名 类型 字段 描述 idx_name INDEX name 名称索引 - 备注:
表 2:[表名]
- 描述:
- 表结构:
字段名 数据类型 约束 默认值 描述 id BIGINT PRIMARY KEY, AUTO_INCREMENT - 主键 foreign_id BIGINT NOT NULL, FOREIGN KEY REFERENCES table1(id) - 外键 value VARCHAR(100) NOT NULL - 值 - 索引:
索引名 类型 字段 描述 idx_foreign_id INDEX foreign_id 外键索引 - 备注:
SQL 代码
查询语句
查询 1:[查询名称]
- 功能描述:
- SQL 语句:
-- 查询1描述 SELECT t1.id, t1.name, t2.value FROM table1 t1 JOIN table2 t2 ON t1.id = t2.foreign_id WHERE t1.name LIKE '%%' AND t2.value IS NOT NULL ORDER BY t1.create_time DESC; - 使用场景:
- 性能优化:
查询 2:[查询名称]
- 功能描述:
- SQL 语句:
-- 查询2描述 - 使用场景:
- 性能优化:
存储过程
存储过程 1:[存储过程名称]
- 功能描述:
- SQL 代码:
-- 存储过程1描述 DELIMITER // CREATE PROCEDURE procedure_name(IN param1 INT, OUT result INT) BEGIN -- 存储过程逻辑 SELECT COUNT(*) INTO result FROM table1 WHERE id > param1; END // DELIMITER ; - 参数说明:
参数名 类型 方向 描述 param1 INT IN 输入参数 result INT OUT 输出参数 - 调用示例:
CALL procedure_name(100, @result); SELECT @result;
触发器
触发器 1:[触发器名称]
- 功能描述:
- SQL 代码:
-- 触发器1描述 DELIMITER // CREATE TRIGGER trigger_name AFTER INSERT ON table1 FOR EACH ROW BEGIN -- 触发器逻辑 INSERT INTO table2(foreign_id, value) VALUES(NEW.id, 'default_value'); END // DELIMITER ; - 触发条件:
- 执行逻辑:
视图
视图 1:[视图名称]
- 功能描述:
- SQL 代码:
-- 视图1描述 CREATE VIEW view_name AS SELECT t1.id, t1.name, t2.value FROM table1 t1 JOIN table2 t2 ON t1.id = t2.foreign_id; - 使用场景:
使用示例
基本查询示例
-- 基本查询示例
SELECT * FROM table1 WHERE name = 'example';
复杂查询示例
-- 复杂查询示例
存储过程调用示例
-- 存储过程调用示例
优化建议
索引优化
- 建议1:
- 建议2:
查询优化
- 建议1:
- 建议2:
性能监控
- 监控指标:
- 监控工具:
维护指南
备份策略
- 备份频率:
- 备份方式:
- 备份存储位置:
恢复流程
- 恢复步骤:
- 验证方法:
更新流程
- 更新步骤:
- 测试方法:
- 回滚方案:
常见问题
| 问题 | 解决方案 |
|---|---|
| 问题1 | 解决方案1 |
| 问题2 | 解决方案2 |
变更历史
| 版本 | 日期 | 变更内容 | 变更人 |
|---|---|---|---|
| 1.0.0 | YYYY-MM-DD | 初始版本 | |
| 1.1.0 | YYYY-MM-DD | 添加新表 |