feat: 添加环境初始数据源配置功能(阶段一:需求定义)
- 在 DataiConfigEnvironment 实体中添加 isInitialDataSource 字段 - 创建需求文档:环境初始数据源配置需求 - 支持为每个环境配置初始数据源 - 支持应用启动时自动加载环境的初始数据源 - 结合动态数据源延迟加载机制,实现环境与数据源的灵活绑定 需求编号: 2026-01-24-001 阶段: 阶段一 - 需求定义
This commit is contained in:
parent
4b4dc90a98
commit
813b76f87e
@ -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())
|
||||
|
||||
@ -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)
|
||||
Loading…
Reference in New Issue
Block a user