2026-01-19 11:10:28 +08:00
|
|
|
|
# 架构决策记录 - 元数据拉取核心功能
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
## 背景
|
|
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
REQ-010-6 需要实现 Salesforce 元数据拉取的核心功能,包括手动触发拉取、异步拉取执行、状态监控、拉取历史记录、拉取进度查询、拉取取消功能等。
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
当前项目已经完成了数据库表结构设计、基础实体类和 Mapper 创建、Salesforce 组织配置管理、元数据任务定义管理、Metadata API 客户端封装等功能,现在需要实现元数据拉取核心功能,为用户提供完整的元数据拉取服务。
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
## 决策
|
|
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
### 1. 手动触发拉取功能方案
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**决策**: 使用 MetadataApiClient 调用 retrieve() 方法,使用异步线程池执行拉取任务,使用 RESTful API 设计接口。
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
**理由**:
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- MetadataApiClient 已经封装了 Salesforce Metadata API 的 retrieve() 方法,可以直接使用
|
|
|
|
|
|
- 异步线程池可以避免阻塞主线程,提高系统响应速度
|
|
|
|
|
|
- RESTful API 设计符合业界标准,易于使用和扩展
|
|
|
|
|
|
- 支持选择任务 ID 和组织配置,满足业务需求
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
**实现方案**:
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- 使用 MetadataApiClient 的 retrieve() 方法执行拉取操作
|
|
|
|
|
|
- 使用 Spring 的 @Async 注解实现异步执行
|
|
|
|
|
|
- 使用 ThreadPoolTaskExecutor 配置线程池
|
|
|
|
|
|
- 使用 RESTful API 设计接口,包括 POST 方法触发拉取
|
|
|
|
|
|
- 使用 MyBatis Plus 的 QueryWrapper 实现条件查询
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
### 2. 异步拉取执行方案
|
|
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**决策**: 使用 Spring 的 @Async 注解实现异步执行,使用 ThreadPoolTaskExecutor 配置线程池,使用 CompletableFuture 支持异步结果。
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
**理由**:
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- Spring 的 @Async 注解可以简化异步编程,提高开发效率
|
|
|
|
|
|
- ThreadPoolTaskExecutor 可以配置线程池,管理异步任务
|
|
|
|
|
|
- CompletableFuture 可以支持异步结果,提高代码可读性
|
|
|
|
|
|
- 支持并发拉取,满足业务需求
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
**实现方案**:
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- 使用 Spring 的 @Async 注解实现异步执行
|
|
|
|
|
|
- 使用 ThreadPoolTaskExecutor 配置线程池
|
|
|
|
|
|
- 使用 CompletableFuture 支持异步结果
|
|
|
|
|
|
- 使用 Future 接口支持取消操作
|
|
|
|
|
|
- 使用 @Retryable 注解实现重试机制
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
### 3. 状态监控方案
|
|
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**决策**: 使用状态机管理拉取状态,使用轮询机制检查拉取状态,使用枚举类定义拉取状态。
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
**理由**:
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- 状态机可以清晰定义状态转换逻辑,提高代码可读性
|
|
|
|
|
|
- 轮询机制可以及时获取拉取状态,支持超时处理
|
|
|
|
|
|
- 枚举类可以定义拉取状态,提高代码可维护性
|
|
|
|
|
|
- 支持状态查询,满足业务需求
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
**实现方案**:
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- 使用枚举类定义拉取状态(Pending/Processing/Success/Failed/Partial_Success)
|
|
|
|
|
|
- 使用状态机管理拉取状态转换逻辑
|
|
|
|
|
|
- 使用轮询机制检查拉取状态
|
|
|
|
|
|
- 使用 ScheduledExecutorService 实现定时任务
|
|
|
|
|
|
- 使用 TimeoutException 处理超时情况
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
### 4. 拉取历史记录方案
|
|
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**决策**: 使用 MyBatis Plus 的 BaseMapper 实现历史记录查询,使用分页插件实现分页查询,使用条件查询支持多条件查询。
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
**理由**:
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- MyBatis Plus 的 BaseMapper 提供了基础的 CRUD 方法,简化了开发
|
|
|
|
|
|
- 分页插件可以实现分页查询,提高查询性能
|
|
|
|
|
|
- 条件查询可以支持多条件查询,满足业务需求
|
|
|
|
|
|
- 历史记录完整,方便用户查询
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
**实现方案**:
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- 使用 MyBatis Plus 的 BaseMapper 提供基础的 CRUD 方法
|
|
|
|
|
|
- 使用 MyBatis Plus 的分页插件实现分页查询
|
|
|
|
|
|
- 使用 MyBatis Plus 的 QueryWrapper 实现条件查询
|
|
|
|
|
|
- 使用 @Valid 注解进行参数验证
|
|
|
|
|
|
- 使用 RESTful API 设计接口,包括 GET 方法查询历史记录
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
### 5. 拉取进度查询方案
|
|
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**决策**: 使用轮询机制获取进度,使用缓存提高查询性能,使用百分比显示进度。
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
**理由**:
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- 轮询机制可以及时获取进度,支持实时进度查询
|
|
|
|
|
|
- 缓存可以提高查询性能,减少数据库查询
|
|
|
|
|
|
- 百分比显示进度,提高用户体验
|
|
|
|
|
|
- 进度信息准确,满足业务需求
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
**实现方案**:
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- 使用轮询机制获取进度
|
|
|
|
|
|
- 使用 Redis 缓存提高查询性能
|
|
|
|
|
|
- 使用百分比显示进度
|
|
|
|
|
|
- 使用 RESTful API 设计接口,包括 GET 方法查询进度
|
|
|
|
|
|
- 使用 @Cacheable 注解实现缓存
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
### 6. 拉取取消功能方案
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**决策**: 使用 Future.cancel() 取消异步任务,使用状态机管理取消状态,使用异常处理机制处理取消异常。
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
**理由**:
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- Future.cancel() 可以取消异步任务,释放资源
|
|
|
|
|
|
- 状态机可以管理取消状态,提高代码可读性
|
|
|
|
|
|
- 异常处理机制可以处理取消异常,提高系统稳定性
|
|
|
|
|
|
- 取消后资源正确释放,满足业务需求
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
**实现方案**:
|
|
|
|
|
|
- 使用 Future.cancel() 取消异步任务
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- 使用状态机管理取消状态
|
|
|
|
|
|
- 使用自定义异常类处理取消异常
|
|
|
|
|
|
- 使用 @Transactional 注解保证事务一致性
|
|
|
|
|
|
- 使用 Slf4j 记录取消日志
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
## 备选方案
|
|
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
### 1. 手动触发拉取功能备选方案
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**备选方案 1**: 使用消息队列实现手动触发拉取
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
**优点**:
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- 消息队列可以解耦任务提交和任务执行
|
|
|
|
|
|
- 支持任务持久化和重试
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
**缺点**:
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- 消息队列增加了系统复杂度
|
|
|
|
|
|
- 需要引入额外的依赖
|
|
|
|
|
|
|
|
|
|
|
|
**备选方案 2**: 使用定时任务实现手动触发拉取
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**优点**:
|
|
|
|
|
|
- 定时任务可以实现定时拉取
|
|
|
|
|
|
- 实现简单
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**缺点**:
|
|
|
|
|
|
- 定时任务不支持手动触发
|
|
|
|
|
|
- 不支持实时拉取
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
### 2. 异步拉取执行备选方案
|
|
|
|
|
|
|
|
|
|
|
|
**备选方案 1**: 使用消息队列实现异步拉取执行
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
**优点**:
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- 消息队列可以解耦任务提交和任务执行
|
|
|
|
|
|
- 支持任务持久化和重试
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
**缺点**:
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- 消息队列增加了系统复杂度
|
|
|
|
|
|
- 需要引入额外的依赖
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**备选方案 2**: 使用线程池实现异步拉取执行
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**优点**:
|
|
|
|
|
|
- 线程池可以管理异步任务
|
|
|
|
|
|
- 实现简单
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**缺点**:
|
|
|
|
|
|
- 线程池不支持异步结果
|
|
|
|
|
|
- 不支持取消操作
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 状态监控备选方案
|
|
|
|
|
|
|
|
|
|
|
|
**备选方案 1**: 使用回调机制实现状态监控
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
**优点**:
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- 回调机制可以及时获取状态
|
|
|
|
|
|
- 不需要定时任务,实现简单
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
**缺点**:
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- Salesforce Metadata API 不支持回调机制
|
|
|
|
|
|
- 需要使用 Webhook,增加系统复杂度
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**备选方案 2**: 使用 WebSocket 实现状态监控
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**优点**:
|
|
|
|
|
|
- WebSocket 可以实时推送状态
|
|
|
|
|
|
- 用户体验好
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**缺点**:
|
|
|
|
|
|
- WebSocket 增加了系统复杂度
|
|
|
|
|
|
- 需要引入额外的依赖
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
### 4. 拉取历史记录备选方案
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**备选方案 1**: 使用缓存实现拉取历史记录
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**优点**:
|
|
|
|
|
|
- 缓存可以提高查询性能
|
|
|
|
|
|
- 减少数据库查询
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**缺点**:
|
|
|
|
|
|
- 缓存可能导致数据不一致
|
|
|
|
|
|
- 缓存容量有限
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**备选方案 2**: 使用文件存储实现拉取历史记录
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**优点**:
|
|
|
|
|
|
- 文件存储可以持久化历史记录
|
|
|
|
|
|
- 实现简单
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**缺点**:
|
|
|
|
|
|
- 文件存储查询性能差
|
|
|
|
|
|
- 不支持条件查询
|
|
|
|
|
|
|
|
|
|
|
|
### 5. 拉取进度查询备选方案
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**备选方案 1**: 使用数据库查询实现拉取进度查询
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**优点**:
|
|
|
|
|
|
- 数据库查询可以实时获取进度
|
|
|
|
|
|
- 实现简单
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**缺点**:
|
|
|
|
|
|
- 数据库查询性能差
|
|
|
|
|
|
- 可能影响系统性能
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**备选方案 2**: 使用消息推送实现拉取进度查询
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**优点**:
|
|
|
|
|
|
- 消息推送可以实时推送进度
|
|
|
|
|
|
- 用户体验好
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**缺点**:
|
|
|
|
|
|
- 消息推送增加了系统复杂度
|
|
|
|
|
|
- 需要引入额外的依赖
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
### 6. 拉取取消功能备选方案
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**备选方案 1**: 使用标志位实现拉取取消
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**优点**:
|
|
|
|
|
|
- 标志位实现简单
|
|
|
|
|
|
- 不需要额外的依赖
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**缺点**:
|
|
|
|
|
|
- 标志位不能真正取消任务
|
|
|
|
|
|
- 资源可能无法释放
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**备选方案 2**: 使用中断机制实现拉取取消
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**优点**:
|
|
|
|
|
|
- 中断机制可以中断任务
|
|
|
|
|
|
- 实现简单
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
**缺点**:
|
|
|
|
|
|
- 中断机制可能导致资源泄漏
|
|
|
|
|
|
- 不支持优雅取消
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
## 影响
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
### 系统架构影响
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- 新增手动触发拉取功能,支持用户手动触发拉取
|
|
|
|
|
|
- 新增异步拉取执行,支持异步执行和并发拉取
|
|
|
|
|
|
- 新增状态监控,支持状态查询和状态转换
|
|
|
|
|
|
- 新增拉取历史记录,支持分页查询和条件查询
|
|
|
|
|
|
- 新增拉取进度查询,支持实时进度查询和缓存
|
|
|
|
|
|
- 新增拉取取消功能,支持取消异步任务和资源释放
|
|
|
|
|
|
|
|
|
|
|
|
### 开发流程影响
|
|
|
|
|
|
|
|
|
|
|
|
- 需要配置异步线程池
|
|
|
|
|
|
- 需要配置 Redis 缓存
|
|
|
|
|
|
- 需要编写单元测试和集成测试
|
|
|
|
|
|
- 需要编写使用文档
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
### 运维管理影响
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- 需要监控异步线程池的使用情况
|
|
|
|
|
|
- 需要监控状态轮询的频率
|
|
|
|
|
|
- 需要监控 Redis 缓存的使用情况
|
|
|
|
|
|
- 需要监控拉取任务的执行情况
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
## 风险
|
|
|
|
|
|
|
|
|
|
|
|
### 技术风险
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- **异步执行风险**: 异步执行机制复杂可能导致状态管理困难
|
|
|
|
|
|
- **状态轮询风险**: 状态轮询频率不当可能导致 API 限流
|
|
|
|
|
|
- **拉取取消风险**: 拉取取消功能复杂可能导致资源泄漏
|
|
|
|
|
|
- **历史记录风险**: 拉取历史记录过多可能影响查询性能
|
|
|
|
|
|
- **进度查询风险**: 进度查询不准确可能导致用户体验差
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
### 业务风险
|
|
|
|
|
|
|
|
|
|
|
|
- **拉取失败风险**: 拉取失败可能导致元数据丢失
|
|
|
|
|
|
- **状态不一致风险**: 状态不一致可能导致用户困惑
|
|
|
|
|
|
- **进度不准确风险**: 进度不准确可能导致用户体验差
|
|
|
|
|
|
- **取消失败风险**: 取消失败可能导致资源泄漏
|
|
|
|
|
|
|
|
|
|
|
|
### 实施风险
|
|
|
|
|
|
|
|
|
|
|
|
- **开发时间风险**: 开发时间可能超出预期
|
|
|
|
|
|
- **测试时间风险**: 测试时间可能超出预期
|
|
|
|
|
|
- **上线时间风险**: 上线时间可能超出预期
|
|
|
|
|
|
|
|
|
|
|
|
## 回滚策略
|
|
|
|
|
|
|
|
|
|
|
|
如果决策实施后出现问题,可以采取以下回滚策略:
|
|
|
|
|
|
|
|
|
|
|
|
1. **禁用异步执行**: 如果异步执行机制有问题,可以禁用异步执行,使用同步方式
|
|
|
|
|
|
2. **调整轮询频率**: 如果状态轮询频率有问题,可以调整轮询频率
|
|
|
|
|
|
3. **简化取消功能**: 如果拉取取消功能有问题,可以简化取消功能,使用标志位
|
|
|
|
|
|
4. **禁用缓存**: 如果缓存有问题,可以禁用缓存,使用数据库查询
|
|
|
|
|
|
5. **优化历史记录查询**: 如果历史记录查询性能有问题,可以优化查询,使用索引
|
|
|
|
|
|
|
|
|
|
|
|
## 验收标准
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
定义验证该决策有效性的具体标准和测试方法:
|
|
|
|
|
|
|
|
|
|
|
|
1. **手动触发拉取功能验收标准**:
|
|
|
|
|
|
- 手动触发拉取成功
|
|
|
|
|
|
- 支持选择任务 ID
|
|
|
|
|
|
- 支持选择组织配置
|
|
|
|
|
|
- 触发成功返回 Job ID
|
|
|
|
|
|
- API 接口符合 RESTful 规范
|
|
|
|
|
|
|
|
|
|
|
|
2. **异步拉取执行验收标准**:
|
|
|
|
|
|
- 异步拉取执行正常工作
|
|
|
|
|
|
- 使用线程池管理异步任务
|
|
|
|
|
|
- 支持并发拉取
|
|
|
|
|
|
- 拉取任务不阻塞系统响应
|
|
|
|
|
|
|
|
|
|
|
|
3. **状态监控验收标准**:
|
|
|
|
|
|
- 状态监控正常工作
|
|
|
|
|
|
- 使用状态机管理拉取状态
|
|
|
|
|
|
- 支持状态查询
|
|
|
|
|
|
- 状态更新及时
|
|
|
|
|
|
|
|
|
|
|
|
4. **拉取历史记录验收标准**:
|
|
|
|
|
|
- 拉取历史记录成功
|
|
|
|
|
|
- 支持分页查询
|
|
|
|
|
|
- 支持条件查询
|
|
|
|
|
|
- 历史记录完整
|
|
|
|
|
|
|
|
|
|
|
|
5. **拉取进度查询验收标准**:
|
|
|
|
|
|
- 拉取进度查询成功
|
|
|
|
|
|
- 支持实时进度查询
|
|
|
|
|
|
- 进度信息准确
|
|
|
|
|
|
- 支持进度百分比显示
|
|
|
|
|
|
|
|
|
|
|
|
6. **拉取取消功能验收标准**:
|
|
|
|
|
|
- 拉取取消功能正常工作
|
|
|
|
|
|
- 支持取消正在进行的拉取任务
|
|
|
|
|
|
- 取消后资源正确释放
|
|
|
|
|
|
- 取消状态更新及时
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
## 视觉锚点
|
|
|
|
|
|
|
|
|
|
|
|
### Visual Reference
|
|
|
|
|
|
|
|
|
|
|
|
引用 Canvas 的具体节点或快照:
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- [Authentication.canvas](../../Authentication.canvas) - 项目架构视觉化展示
|
|
|
|
|
|
- **相关节点**: [集成核心](node_integration_core) - 提供与Salesforce的各种连接方式
|
|
|
|
|
|
- **相关节点**: [SessionManager](node_session_manager_detail) - 会话管理,提供登录服务
|
2026-01-19 10:06:09 +08:00
|
|
|
|
|
|
|
|
|
|
### Status
|
|
|
|
|
|
|
|
|
|
|
|
- [x] Draft
|
|
|
|
|
|
- [ ] Accepted
|
|
|
|
|
|
- [ ] Superceded
|
|
|
|
|
|
|
|
|
|
|
|
## 参考资料
|
|
|
|
|
|
|
|
|
|
|
|
列出与该决策相关的参考资料,包括文档、文章或其他资源:
|
|
|
|
|
|
|
2026-01-19 11:10:28 +08:00
|
|
|
|
- [REQ-010-6.md](../requirements/REQ-010-6.md) - 元数据拉取核心功能需求文档
|
|
|
|
|
|
- [REQ-010-1.md](../requirements/REQ-010-1.md) - 数据库表结构设计和创建
|
|
|
|
|
|
- [REQ-010-2.md](../requirements/REQ-010-2.md) - 基础实体类和Mapper创建
|
|
|
|
|
|
- [REQ-010-3.md](../requirements/REQ-010-3.md) - Salesforce组织配置管理
|
|
|
|
|
|
- [REQ-010-4.md](../requirements/REQ-010-4.md) - 元数据任务定义管理
|
|
|
|
|
|
- [REQ-010-5.md](../requirements/REQ-010-5.md) - Metadata API客户端封装
|
|
|
|
|
|
- [Salesforce Metadata API Developer Guide](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/) - Salesforce Metadata API 官方文档
|
|
|
|
|
|
- [Spring Async Documentation](https://docs.spring.io/spring-framework/docs/current/reference/html/integration.html#scheduling-annotation-support-async) - Spring 异步支持文档
|
|
|
|
|
|
- [MyBatis Plus Documentation](https://baomidou.com/) - MyBatis Plus 官方文档
|