datai/docs/Authentication.canvas
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

51 lines
15 KiB
Plaintext
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.

{
"nodes":[
{"id":"node_admin_module","type":"text","text":"## 📦 管理后台模块 (datai-admin)\n> [!info] 职责描述\n> 系统管理后台提供Web界面和API接口\n\n### 核心组件\n- **控制器层**: 提供REST API接口\n - 系统管理控制器\n - 监控管理控制器\n - 通用控制器\n- **配置**: Swagger配置、应用配置等\n- **启动类**: DataIApplication\n\n**设计意图**作为系统的管理入口提供Web界面和API接口支持系统管理和监控功能","parentNode":"group_admin","x":-800,"y":100,"width":500,"height":300,"color":"4"},
{"id":"node_common_module","type":"text","text":"## 📦 通用工具模块 (datai-common)\n> [!info] 职责描述\n> 提供系统通用的工具类、常量、异常处理等\n\n### 核心组件\n- **注解**: 各种业务注解\n- **配置**: 通用配置\n- **常量**: 系统常量\n- **核心类**: 基础控制器、领域模型、分页工具等\n- **枚举**: 业务枚举\n- **异常**: 自定义异常类\n- **过滤器**: XSS过滤、重复提交过滤等\n- **工具类**: 字符串、日期、加密、反射等工具\n\n**设计意图**:提供系统通用的功能组件,避免代码重复,提高开发效率","parentNode":"group_common","x":-800,"y":500,"width":500,"height":400,"color":"6"},
{"id":"node_framework_module","type":"text","text":"## 📦 核心框架模块 (datai-framework)\n> [!info] 职责描述\n> 系统核心框架提供AOP、配置、数据源、安全等基础功能\n\n### 核心组件\n- **AOP切面**: 数据权限、数据源切换、日志记录等\n- **配置**: Druid、MyBatis、安全配置等\n- **数据源**: 动态数据源管理、延迟加载支持\n- **拦截器**: 重复提交拦截器\n- **管理器**: 异步任务管理器、数据源管理器等\n- **安全**: 权限管理、登录服务、令牌服务等\n\n**设计意图**:提供系统的核心框架功能,支撑业务模块的运行","parentNode":"group_framework","x":-800,"y":1000,"width":500,"height":400,"color":"4"},
{"id":"node_models_module","type":"text","text":"## 📦 模型模块集合 (datai-models)\n> [!info] 职责描述\n> 包含多个业务模型模块,支持不同的业务场景\n\n### 子模块\n- **datai-flowable**: 工作流模块\n- **datai-form**: 表单模块\n- **datai-generator**: 代码生成器模块\n- **datai-message**: 消息模块\n- **datai-online**: 在线开发模块\n- **datai-quartz**: 定时任务模块\n\n**设计意图**:模块化设计,支持不同业务场景的快速集成和扩展","parentNode":"group_models","x":-800,"y":1500,"width":500,"height":300,"color":"4"},
{"id":"node_plugins_module","type":"text","text":"## 📦 插件模块集合 (datai-plugins)\n> [!info] 职责描述\n> 提供各种插件支持,增强系统功能\n\n### 子模块\n- **datai-atomikos**: Atomikos事务管理\n- **datai-cache-ehcache**: Ehcache缓存实现\n- **datai-cache-redis**: Redis缓存实现\n- **datai-mybatis-interceptor**: MyBatis拦截器\n- **datai-mybatis-jpa**: MyBatis JPA支持\n- **datai-mybatis-plus**: MyBatis Plus支持\n- **datai-netty**: Netty通信框架\n- **datai-rabbitmq**: RabbitMQ消息队列\n- **datai-websocket**: WebSocket支持\n\n**设计意图**:插件化设计,支持功能的灵活扩展和替换","parentNode":"group_plugins","x":-800,"y":1900,"width":500,"height":350,"color":"4"},
{"id":"node_scenes_module","type":"text","text":"## 📦 场景模块集合 (datai-scenes)\n> [!info] 职责描述\n> 提供特定业务场景的解决方案\n\n### 子模块\n- **datai-scene-auth**: 认证场景模块\n - OAuth2/JustAuth认证\n - 双因素认证(邮箱/手机)\n- **datai-scene-file**: 文件场景模块\n - 本地文件存储\n - 阿里云OSS\n - MinIO存储\n- **datai-scene-pay**: 支付场景模块\n - 支付宝支付\n - 微信支付\n - 收钱吧支付\n\n**设计意图**:针对特定业务场景提供完整的解决方案,方便快速集成","parentNode":"group_scenes","x":-800,"y":2350,"width":500,"height":350,"color":"4"},
{"id":"node_system_module","type":"text","text":"## 📦 系统核心模块 (datai-system)\n> [!info] 职责描述\n> 系统核心功能模块,提供用户、角色、权限、字典等基础功能\n\n### 核心组件\n- **领域模型**: 用户、角色、菜单、部门、岗位、字典等\n- **Mapper层**: 数据访问接口\n- **Service层**: 业务逻辑实现\n\n**设计意图**:提供系统的核心业务功能,支撑其他模块的运行","parentNode":"group_system","x":-800,"y":2800,"width":500,"height":300,"color":"4"},
{"id":"node_auth_controller","type":"text","text":"## 认证控制器\n> [!info] 职责描述\n> 处理系统登录、登出、注册等认证相关请求\n\n### 核心控制器\n- **SysLoginController**: 登录控制器\n- **SysRegisterController**: 注册控制器\n- **SysProfileController**: 用户信息控制器\n\n### 核心功能\n- 用户名密码登录\n- 验证码生成与验证\n- 登录信息管理\n- 用户注册\n\n**设计意图**提供系统认证相关的REST API接口支持用户登录、登出和注册功能","parentNode":"group_admin","x":100,"y":100,"width":500,"height":300,"color":"5"},
{"id":"node_system_controller","type":"text","text":"## 系统管理控制器\n> [!info] 职责描述\n> 处理系统管理相关请求\n\n### 核心控制器\n- **SysUserController**: 用户管理\n- **SysRoleController**: 角色管理\n- **SysMenuController**: 菜单管理\n- **SysDeptController**: 部门管理\n- **SysPostController**: 岗位管理\n- **SysDictTypeController**: 字典类型管理\n- **SysDictDataController**: 字典数据管理\n- **SysConfigController**: 配置管理\n- **SysNoticeController**: 通知公告管理\n\n**设计意图**提供系统管理相关的REST API接口支持用户、角色、权限等核心功能管理","parentNode":"group_admin","x":100,"y":500,"width":500,"height":400,"color":"5"},
{"id":"node_monitor_controller","type":"text","text":"## 监控管理控制器\n> [!info] 职责描述\n> 处理系统监控相关请求\n\n### 核心控制器\n- **CacheController**: 缓存监控\n- **ServerController**: 服务器监控\n- **SysLogininforController**: 登录日志管理\n- **SysOperlogController**: 操作日志管理\n- **SysUserOnlineController**: 在线用户管理\n\n**设计意图**提供系统监控相关的REST API接口支持缓存、服务器、日志等监控功能","parentNode":"group_admin","x":100,"y":1000,"width":500,"height":300,"color":"5"},
{"id":"node_security_service","type":"text","text":"## 安全服务\n> [!info] 职责描述\n> 提供认证、授权、密码管理等安全相关功能\n\n### 核心服务\n- **SysLoginService**: 登录服务\n- **SysPasswordService**: 密码服务\n- **SysPermissionService**: 权限服务\n- **SysRegisterService**: 注册服务\n- **TokenService**: 令牌服务\n- **UserDetailsServiceImpl**: 用户详情服务\n\n**设计意图**:提供系统安全相关的服务,支持认证、授权、密码管理等功能","parentNode":"group_framework","x":100,"y":1400,"width":500,"height":300,"color":"4"},
{"id":"node_auth_model","type":"text","text":"## 认证模型\n> [!info] 职责描述\n> 定义认证相关的数据模型\n\n### 核心模型\n- **SysLogininfor**: 登录信息\n- **SysUserOnline**: 在线用户\n\n**设计意图**:定义认证相关的数据模型,支持登录信息记录和在线用户管理","parentNode":"group_system","x":100,"y":1800,"width":500,"height":250,"color":"1"},
{"id":"node_system_model","type":"text","text":"## 系统核心模型\n> [!info] 职责描述\n> 定义系统核心的数据模型\n\n### 核心模型\n- **SysUser**: 用户信息\n- **SysRole**: 角色信息\n- **SysMenu**: 菜单信息\n- **SysDept**: 部门信息\n- **SysPost**: 岗位信息\n- **SysDictType**: 字典类型\n- **SysDictData**: 字典数据\n- **SysConfig**: 系统配置\n- **SysNotice**: 通知公告\n- **SysOperLog**: 操作日志\n\n**设计意图**:定义系统核心的数据模型,支持用户、角色、权限等核心功能","parentNode":"group_system","x":100,"y":2150,"width":500,"height":400,"color":"1"},
{"id":"node_flowable_model","type":"text","text":"## 工作流模型\n> [!info] 职责描述\n> 定义工作流相关的数据模型\n\n### 核心模型\n- **SysDeployForm**: 部署表单\n- **SysExpression**: 表达式\n- **SysListener**: 监听器\n- **SysTaskForm**: 任务表单\n\n**设计意图**:定义工作流相关的数据模型,支持工作流的部署、执行和管理","parentNode":"group_models","x":700,"y":100,"width":500,"height":250,"color":"1"},
{"id":"node_form_model","type":"text","text":"## 表单模型\n> [!info] 职责描述\n> 定义表单相关的数据模型\n\n### 核心模型\n- **FormData**: 表单数据\n- **FormTemplate**: 表单模板\n\n**设计意图**:定义表单相关的数据模型,支持表单的创建、提交和管理","parentNode":"group_models","x":700,"y":450,"width":500,"height":200,"color":"1"},
{"id":"node_generator_model","type":"text","text":"## 代码生成器模型\n> [!info] 职责描述\n> 定义代码生成器相关的数据模型\n\n### 核心模型\n- **GenTable**: 表信息\n- **GenColumn**: 列信息\n- **GenJoin**: 关联信息\n\n**设计意图**:定义代码生成器相关的数据模型,支持代码的自动生成","parentNode":"group_models","x":700,"y":750,"width":500,"height":200,"color":"1"},
{"id":"node_message_model","type":"text","text":"## 消息模型\n> [!info] 职责描述\n> 定义消息相关的数据模型\n\n### 核心模型\n- **MessageSystem**: 消息系统\n- **MessageTemplate**: 消息模板\n- **MessageVariable**: 消息变量\n\n**设计意图**:定义消息相关的数据模型,支持消息的发送和管理","parentNode":"group_models","x":700,"y":1050,"width":500,"height":200,"color":"1"},
{"id":"node_online_model","type":"text","text":"## 在线开发模型\n> [!info] 职责描述\n> 定义在线开发相关的数据模型\n\n### 核心模型\n- **OnlineMb**: 在线表单\n\n**设计意图**:定义在线开发相关的数据模型,支持在线表单的创建和管理","parentNode":"group_models","x":700,"y":1350,"width":500,"height":200,"color":"1"},
{"id":"node_quartz_model","type":"text","text":"## 定时任务模型\n> [!info] 职责描述\n> 定义定时任务相关的数据模型\n\n### 核心模型\n- **SysJob**: 定时任务\n- **SysJobLog**: 任务日志\n\n**设计意图**:定义定时任务相关的数据模型,支持定时任务的创建、执行和管理","parentNode":"group_models","x":700,"y":1650,"width":500,"height":200,"color":"1"},
{"id":"node_auth_scene","type":"text","text":"## 认证场景\n> [!info] 职责描述\n> 提供各种认证方式的实现\n\n### 核心组件\n- **OAuth2/JustAuth**: 第三方登录\n- **双因素认证**: 邮箱、手机验证码\n\n**设计意图**:提供多种认证方式的实现,支持灵活的认证配置","parentNode":"group_scenes","x":700,"y":2000,"width":500,"height":200,"color":"5"},
{"id":"node_file_scene","type":"text","text":"## 文件场景\n> [!info] 职责描述\n> 提供多种文件存储方式的实现\n\n### 核心组件\n- **本地文件存储**: 存储在本地服务器\n- **阿里云OSS**: 存储在阿里云对象存储\n- **MinIO**: 分布式对象存储\n\n**设计意图**:提供多种文件存储方式的实现,支持灵活的文件存储配置","parentNode":"group_scenes","x":700,"y":2300,"width":500,"height":200,"color":"5"},
{"id":"node_pay_scene","type":"text","text":"## 支付场景\n> [!info] 职责描述\n> 提供多种支付方式的实现\n\n### 核心组件\n- **支付宝支付**: 支付宝接口集成\n- **微信支付**: 微信支付接口集成\n- **收钱吧支付**: 收钱吧接口集成\n\n**设计意图**:提供多种支付方式的实现,支持灵活的支付配置","parentNode":"group_scenes","x":700,"y":2600,"width":500,"height":200,"color":"5"},
{"id":"node_warning","type":"text","text":"## ⚠️ 注意事项\n\n### 核心设计原则\n1. **模块化设计**: 各模块职责清晰,低耦合高内聚\n2. **插件化架构**: 支持功能的灵活扩展和替换\n3. **安全性优先**: 完善的认证授权机制\n4. **可扩展性**: 支持业务的快速扩展\n5. **易用性**: 提供友好的开发接口和文档\n\n### 建议\n- 遵循模块化开发规范\n- 合理使用插件扩展功能\n- 注重系统安全性\n- 完善日志记录和监控\n- 定期进行代码优化和重构","x":700,"y":3000,"width":500,"height":250,"color":"3"}
],
"edges":[
{"id":"edge_admin_to_common","fromNode":"node_admin_module","fromSide":"right","toNode":"node_common_module","toSide":"left","color":"4","label":"依赖"},
{"id":"edge_admin_to_framework","fromNode":"node_admin_module","fromSide":"right","toNode":"node_framework_module","toSide":"left","color":"4","label":"依赖"},
{"id":"edge_admin_to_system","fromNode":"node_admin_module","fromSide":"right","toNode":"node_system_module","toSide":"left","color":"4","label":"依赖"},
{"id":"edge_framework_to_common","fromNode":"node_framework_module","fromSide":"right","toNode":"node_common_module","toSide":"left","color":"4","label":"依赖"},
{"id":"edge_models_to_common","fromNode":"node_models_module","fromSide":"right","toNode":"node_common_module","toSide":"left","color":"4","label":"依赖"},
{"id":"edge_plugins_to_common","fromNode":"node_plugins_module","fromSide":"right","toNode":"node_common_module","toSide":"left","color":"4","label":"依赖"},
{"id":"edge_scenes_to_common","fromNode":"node_scenes_module","fromSide":"right","toNode":"node_common_module","toSide":"left","color":"4","label":"依赖"},
{"id":"edge_system_to_common","fromNode":"node_system_module","fromSide":"right","toNode":"node_common_module","toSide":"left","color":"4","label":"依赖"},
{"id":"edge_auth_controller_to_security","fromNode":"node_auth_controller","fromSide":"bottom","toNode":"node_security_service","toSide":"top","color":"4","label":"调用"},
{"id":"edge_system_controller_to_system","fromNode":"node_system_controller","fromSide":"bottom","toNode":"node_system_module","toSide":"top","color":"4","label":"调用"},
{"id":"edge_monitor_controller_to_framework","fromNode":"node_monitor_controller","fromSide":"bottom","toNode":"node_framework_module","toSide":"top","color":"4","label":"调用"},
{"id":"edge_security_to_auth_model","fromNode":"node_security_service","fromSide":"bottom","toNode":"node_auth_model","toSide":"top","color":"4","label":"使用"},
{"id":"edge_security_to_system_model","fromNode":"node_security_service","fromSide":"bottom","toNode":"node_system_model","toSide":"top","color":"4","label":"使用"}
],
"groups":[
{"id":"group_admin","label":"📦 管理后台模块 (datai-admin)","x":-900,"y":0,"width":600,"height":400,"color":"4"},
{"id":"group_common","label":"📦 通用工具模块 (datai-common)","x":-900,"y":450,"width":600,"height":450,"color":"6"},
{"id":"group_framework","label":"📦 核心框架模块 (datai-framework)","x":-900,"y":950,"width":600,"height":450,"color":"4"},
{"id":"group_models","label":"📦 模型模块集合 (datai-models)","x":-900,"y":1450,"width":600,"height":400,"color":"4"},
{"id":"group_plugins","label":"📦 插件模块集合 (datai-plugins)","x":-900,"y":1900,"width":600,"height":400,"color":"4"},
{"id":"group_scenes","label":"📦 场景模块集合 (datai-scenes)","x":-900,"y":2350,"width":600,"height":400,"color":"4"},
{"id":"group_system","label":"📦 系统核心模块 (datai-system)","x":-900,"y":2800,"width":600,"height":400,"color":"4"}
]
}