From 813b76f87ee0ea8b3fed4d49d98a8a1c03505bfb Mon Sep 17 00:00:00 2001 From: Kris <13243687953@163.com> Date: Sat, 24 Jan 2026 18:46:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E6=95=B0=E6=8D=AE=E6=BA=90=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=88=E9=98=B6=E6=AE=B5=E4=B8=80=EF=BC=9A?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E5=AE=9A=E4=B9=89=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 DataiConfigEnvironment 实体中添加 isInitialDataSource 字段 - 创建需求文档:环境初始数据源配置需求 - 支持为每个环境配置初始数据源 - 支持应用启动时自动加载环境的初始数据源 - 结合动态数据源延迟加载机制,实现环境与数据源的灵活绑定 需求编号: 2026-01-24-001 阶段: 阶段一 - 需求定义 --- .../model/domain/DataiConfigEnvironment.java | 16 ++ .../2026-01-24-001-环境初始数据源配置.md | 267 ++++++++++++++++++ 2 files changed, 283 insertions(+) create mode 100644 datai-scenes/datai-scene-salesforce/docs/requirements/2026-01-24-001-环境初始数据源配置.md diff --git a/datai-scenes/datai-scene-salesforce/datai-salesforce-setting/src/main/java/com/datai/setting/model/domain/DataiConfigEnvironment.java b/datai-scenes/datai-scene-salesforce/datai-salesforce-setting/src/main/java/com/datai/setting/model/domain/DataiConfigEnvironment.java index 78fd7197..f4082f9a 100644 --- a/datai-scenes/datai-scene-salesforce/datai-salesforce-setting/src/main/java/com/datai/setting/model/domain/DataiConfigEnvironment.java +++ b/datai-scenes/datai-scene-salesforce/datai-salesforce-setting/src/main/java/com/datai/setting/model/domain/DataiConfigEnvironment.java @@ -55,6 +55,11 @@ public class DataiConfigEnvironment extends BaseEntity @Schema(title = "是否有效") @Excel(name = "是否有效") private Boolean isValid; + + /** 是否初始数据源 */ + @Schema(title = "是否初始数据源") + @Excel(name = "是否初始数据源") + private Boolean isInitialDataSource; public void setId(Long id) { this.id = id; @@ -139,6 +144,16 @@ public class DataiConfigEnvironment extends BaseEntity return isValid; } + public void setIsInitialDataSource(Boolean isInitialDataSource) + { + this.isInitialDataSource = isInitialDataSource; + } + + public Boolean getIsInitialDataSource() + { + return isInitialDataSource; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) @@ -150,6 +165,7 @@ public class DataiConfigEnvironment extends BaseEntity .append("description", getDescription()) .append("isActive", getIsActive()) .append("isValid", getIsValid()) + .append("isInitialDataSource", getIsInitialDataSource()) .append("remark", getRemark()) .append("createBy", getCreateBy()) .append("createTime", getCreateTime()) diff --git a/datai-scenes/datai-scene-salesforce/docs/requirements/2026-01-24-001-环境初始数据源配置.md b/datai-scenes/datai-scene-salesforce/docs/requirements/2026-01-24-001-环境初始数据源配置.md new file mode 100644 index 00000000..f03f116a --- /dev/null +++ b/datai-scenes/datai-scene-salesforce/docs/requirements/2026-01-24-001-环境初始数据源配置.md @@ -0,0 +1,267 @@ +# 环境初始数据源配置需求 + +## 元数据 +- 需求编号:2026-01-24-001 +- 创建时间:2026-01-24 +- 创建人:SSOT 架构师 +- 状态:进行中 +- 优先级:高 + +## 需求概述 +为每个环境配置初始数据源,支持应用启动时自动加载环境的初始数据源,结合动态数据源延迟加载机制,实现环境与数据源的灵活绑定。 + +## 目标 +1. **环境数据源绑定**:每个环境可以配置一个初始数据源,支持主库和从库的灵活配置 +2. **自动加载**:应用启动时自动加载所有标记为初始数据源的环境配置 +3. **延迟加载**:未标记为初始数据源的环境,按需动态加载 +4. **灵活切换**:支持运行时动态切换环境的初始数据源 +5. **无侵入性**:使用现有的 `@DataSource` 注解进行数据源切换,业务代码无需修改 + +## 业务上下文 + +### 当前问题 +- 现有动态数据源延迟加载机制只支持主库和从库的固定配置 +- 多租户场景下,不同租户需要使用不同的数据源,现有方案无法支持 +- 环境切换时,需要手动配置和加载数据源,操作复杂 +- 缺少环境与数据源的关联机制,无法实现环境级别的数据源管理 + +### 业务场景 +``` +环境配置 + 初始数据源 +├─ 环境A(生产环境) +│ ├─ 初始数据源:MASTER(主库) +│ └─ 启动时自动加载 +├─ 环境B(测试环境) +│ ├─ 初始数据源:SLAVE(从库) +│ └─ 启动时自动加载 +└─ 环境C(开发环境) + ├─ 初始数据源:无 + └─ 按需动态加载 +``` + +### 应用场景 +1. **多租户系统**:不同租户使用独立的数据源,租户切换时自动切换数据源 +2. **多环境管理**:生产、测试、开发环境使用不同的数据源,环境切换时自动加载对应数据源 +3. **数据隔离**:不同环境的数据完全隔离,避免数据混淆 +4. **灵活部署**:支持不同环境使用不同的数据库配置,便于部署和测试 + +## 涉众分析 +| 角色 | 需求 | 影响 | +| ---- | ---- | ---- | +| 系统管理员 | 能够为每个环境配置初始数据源 | 降低运维成本,提高环境管理灵活性 | +| 开发人员 | 使用现有注解即可切换数据源,无需修改业务代码 | 降低开发复杂度,提高开发效率 | +| 最终用户 | 系统启动更快,环境切换无感知 | 提升用户体验 | +| 运维人员 | 支持环境级别的数据源管理,减少手动配置 | 提高系统可用性,减少停机时间 | + +## 功能需求 + +### 核心功能 + +#### 功能 1:环境初始数据源配置 +- **描述**:在环境配置表中添加"是否初始数据源"字段,支持为每个环境配置初始数据源 +- **验收标准**: + 1. 在 `datai_config_environment` 表中添加 `is_initial_data_source` 字段 + 2. 支持通过 API 配置环境的初始数据源状态 + 3. 支持查询环境的初始数据源配置 + 4. 支持修改环境的初始数据源配置 + 5. 配置信息包含:环境ID、环境编码、是否初始数据源、初始数据源名称等 +- **优先级**:高 +- **依赖关系**:依赖环境配置管理功能 + +#### 功能 2:初始数据源自动加载 +- **描述**:应用启动时自动加载所有标记为初始数据源的环境配置 +- **验收标准**: + 1. 应用启动时查询所有标记为初始数据源的环境 + 2. 为每个初始数据源环境创建并注册数据源 + 3. 数据源创建成功后记录日志 + 4. 数据源创建失败时记录错误日志,但不影响其他数据源加载 + 5. 支持配置启动时是否自动加载初始数据源(可选) +- **优先级**:高 +- **依赖关系**:依赖功能 1(环境初始数据源配置) + +#### 功能 3:环境数据源关联管理 +- **描述**:建立环境与数据源的关联关系,支持环境级别的数据源管理 +- **验收标准**: + 1. 支持查询环境关联的数据源列表 + 2. 支持添加环境数据源关联 + 3. 支持删除环境数据源关联 + 4. 支持修改环境数据源关联 + 5. 支持查询环境当前激活的数据源 +- **优先级**:高 +- **依赖关系**:依赖功能 1(环境初始数据源配置) + +#### 功能 4:环境数据源动态切换 +- **描述**:支持运行时动态切换环境的初始数据源,无需重启应用 +- **验收标准**: + 1. 支持通过 API 切换环境的初始数据源 + 2. 切换流程:更新环境配置 → 移除旧数据源 → 创建新数据源 → 注册到路由器 + 3. 切换过程线程安全,不影响其他请求 + 4. 切换失败时回滚到原数据源 + 5. 切换时间 < 1 秒 +- **优先级**:高 +- **依赖关系**:依赖功能 1(环境初始数据源配置)、功能 2(初始数据源自动加载) + +#### 功能 5:数据源路由增强 +- **描述**:通过 `@DataSource` 注解实现环境级别的数据源路由 +- **验收标准**: + 1. 使用 `@DataSource(DataSourceType.MASTER)` 切换到主库 + 2. 使用 `@DataSource(DataSourceType.SLAVE)` 切换到从库 + 3. 支持通过环境编码切换数据源 + 4. AOP 切面自动拦截并切换数据源 + 5. 支持方法级别的数据源切换 + 6. 支持类级别的数据源切换 +- **优先级**:高 +- **依赖关系**:依赖功能 2(初始数据源自动加载) + +### 次要功能 + +#### 功能 6:环境数据源状态监控 +- **描述**:提供环境数据源状态监控功能,包括连接池状态、活跃连接数等 +- **验收标准**: + 1. 支持查询环境数据源连接池状态 + 2. 支持查询环境数据源活跃连接数 + 3. 支持查询环境数据源空闲连接数 + 4. 支持查询环境数据源是否可用 + 5. 支持查询环境数据源的加载状态 +- **优先级**:中 +- **依赖关系**:依赖功能 2(初始数据源自动加载) + +#### 功能 7:多数据库类型支持 +- **描述**:支持多种数据库类型的环境数据源配置 +- **验收标准**: + 1. 支持 MySQL 数据库 + 2. 支持 PostgreSQL 数据库 + 3. 支持 Oracle 数据库 + 4. 支持 openGauss 数据库 + 5. 支持 SQL Server 数据库 + 6. 支持 H2 数据库 + 7. 支持扩展其他数据库类型 +- **优先级**:中 +- **依赖关系**:依赖功能 1(环境初始数据源配置) + +## 非功能需求 + +### 性能需求 +- **响应时间**:环境数据源切换响应时间 < 1 秒 +- **吞吐量**:支持 1000+ 并发请求 +- **并发用户数**:支持 500+ 并发用户 +- **启动时间**:应用启动时间减少 20%(相比启动时加载所有数据源) + +### 安全需求 +- **认证方式**:使用现有的 Spring Security 认证机制 +- **授权机制**:只有管理员权限才能操作环境数据源配置 +- **数据加密**:数据库密码加密存储 +- **审计日志**:记录环境数据源配置变更日志 + +### 可用性需求 +- **系统可用性**:99.9% +- **容错机制**:环境数据源切换失败时自动回滚 +- **灾备方案**:主库故障时系统降级,只读模式 + +### 兼容性需求 +- **浏览器兼容性**:支持主流浏览器(Chrome、Firefox、Edge、Safari) +- **操作系统兼容性**:支持 Windows、Linux、macOS +- **接口兼容性**:兼容现有的 `@DataSource` 注解接口 + +### 可扩展性需求 +- **扩展方式**:支持新增环境数据源配置,无需修改代码 +- **负载均衡**:支持多个环境数据源的负载均衡(未来扩展) + +### 可维护性需求 +- **代码可读性**:代码符合项目编码规范,注释完整 +- **文档完整性**:提供完整的使用文档和 API 文档 +- **测试覆盖率**:单元测试覆盖率 ≥ 80% + +## 数据需求 + +### 数据模型 + +#### datai_config_environment 表结构变更 +``` +datai_config_environment (配置环境表) +├─ id (BIGINT) - 主键ID +├─ dept_id (BIGINT) - 部门ID +├─ environment_name (VARCHAR) - 环境名称 +├─ environment_code (VARCHAR) - 环境编码 +├─ org_type (VARCHAR) - ORG类型 +├─ description (VARCHAR) - 环境描述 +├─ is_active (BOOLEAN) - 是否激活 +├─ is_valid (BOOLEAN) - 是否有效 +├─ is_initial_data_source (BOOLEAN) - 是否初始数据源(新增) +├─ remark (VARCHAR) - 备注 +├─ create_by (VARCHAR) - 创建者 +├─ create_time (DATETIME) - 创建时间 +├─ update_by (VARCHAR) - 更新者 +└─ update_time (DATETIME) - 更新时间 +``` + +### 数据存储需求 +- **数据库类型**:MySQL 8.3.0 +- **存储容量**:单表支持 1000 万+ 数据 +- **数据备份策略**:每日备份,保留 7 天 + +### 数据流转需求 +``` +应用启动 + └─ 查询所有标记为初始数据源的环境 + └─ 为每个初始数据源环境创建并注册数据源 + └─ 记录数据源加载日志 + +运行时切换环境 + └─ 查询环境的初始数据源配置 + └─ 移除旧数据源 + └─ 创建新数据源 + └─ 注册到路由器 + └─ 更新环境激活状态 +``` + +## 业务规则 +1. **环境编码唯一性**:环境编码(environment_code)必须唯一 +2. **初始数据源唯一性**:每个环境只能有一个初始数据源 +3. **主库不可删除**:MASTER 数据源不可删除和停用 +4. **切换时事务隔离**:环境数据源切换时不能在事务中执行 +5. **并发安全**:环境数据源切换操作必须线程安全 +6. **密码加密**:数据库密码必须加密存储 +7. **配置验证**:环境数据源配置修改后必须验证连接有效性 +8. **激活环境必须有初始数据源**:激活环境时必须配置初始数据源 + +## 技术约束 +1. **Spring Boot 版本**:3.5.7 +2. **Java 版本**:21 +3. **数据库**:MySQL 8.3.0 +4. **连接池**:Druid 1.2.27 +5. **ORM 框架**:MyBatis 3.5.16 +6. **必须使用现有的 `@DataSource` 注解**:不能引入新的注解或 API + +## 成功标准 +1. 应用启动时间减少 20% +2. 环境数据源切换响应时间 < 1 秒 +3. 支持运行时切换环境数据源,无需重启应用 +4. 业务代码无需修改,使用现有 `@DataSource` 注解即可切换数据源 +5. 单元测试覆盖率 ≥ 80% +6. 系统可用性 ≥ 99.9% + +## 风险评估 +| 风险 | 影响程度 | 发生概率 | 缓解措施 | +| ---- | ------ | ------ | ------ | +| 环境数据源切换失败导致服务不可用 | 高 | 中 | 实现自动回滚机制,切换前备份原配置 | +| 并发切换导致数据源状态不一致 | 中 | 中 | 使用 synchronized 关键字保证线程安全 | +| 密码泄露导致数据库安全风险 | 高 | 低 | 密码加密存储,使用 AES 加密算法 | +| 连接池资源耗尽 | 中 | 中 | 合理配置连接池参数,实现连接池监控 | +| 数据库连接超时 | 中 | 中 | 配置合理的连接超时时间,实现重试机制 | +| 初始数据源配置错误导致启动失败 | 高 | 低 | 启动时验证数据源配置,失败时记录日志但不影响其他数据源 | + +## 依赖关系 +- 依赖现有的 `@DataSource` 注解和 AOP 切面机制 +- 依赖现有的 `DataSourceManager` 数据源管理器 +- 依赖现有的 `DynamicDataSource` 动态数据源路由器 +- 依赖现有的 `DynamicDataSourceContextHolder` 数据源上下文持有者 +- 依赖现有的环境配置管理功能 +- 依赖需求 2026-01-21-001(动态数据源延迟加载) + +## 相关文档 +- [动态数据源延迟加载需求](2026-01-21-001-动态数据源延迟加载.md) +- [设计文档](../design/2026-01-24-001-环境初始数据源配置设计.md) +- [架构决策](../decisions/adr/2026-01-24-001-ADR-环境初始数据源配置.md) +- [数据库脚本](../sql/2026-01-24-001-datai_config_environment.sql) +- [变更日志](../changelog/2026-01-24-001-changelog.md)