99 lines
3.8 KiB
Markdown
99 lines
3.8 KiB
Markdown
|
|
# 事务配置审计报告
|
|||
|
|
|
|||
|
|
## 检查时间
|
|||
|
|
2025-11-06
|
|||
|
|
|
|||
|
|
## 检查范围
|
|||
|
|
所有服务类中的 `@Transactional` 配置
|
|||
|
|
|
|||
|
|
## 检查结果
|
|||
|
|
|
|||
|
|
### ✅ 正确配置的服务
|
|||
|
|
|
|||
|
|
#### 1. StoryboardVideoService
|
|||
|
|
- **类级别**: 无 `@Transactional` ✅
|
|||
|
|
- **createTask**: `@Transactional(propagation = Propagation.REQUIRES_NEW)` ✅
|
|||
|
|
- 快速保存任务,事务立即提交
|
|||
|
|
- **processTaskAsync**: `@Async` + `@Transactional(propagation = Propagation.NOT_SUPPORTED)` ✅
|
|||
|
|
- 在事务外执行,调用外部API不会占用连接
|
|||
|
|
- **其他方法**: 使用独立的事务方法,快速完成 ✅
|
|||
|
|
|
|||
|
|
#### 2. TaskQueueService
|
|||
|
|
- **类级别**: `@Transactional` ⚠️
|
|||
|
|
- **processPendingTasks**: `@Transactional(propagation = Propagation.NOT_SUPPORTED)` ✅
|
|||
|
|
- 覆盖类级别配置,在事务外执行
|
|||
|
|
- **processTask**: `@Transactional(propagation = Propagation.NOT_SUPPORTED)` ✅
|
|||
|
|
- 在事务外调用外部API
|
|||
|
|
- **checkTaskStatuses**: `@Transactional(propagation = Propagation.NOT_SUPPORTED)` ✅
|
|||
|
|
- 在事务外轮询外部API状态
|
|||
|
|
- **checkTaskStatusInternal**: `@Transactional(propagation = Propagation.NOT_SUPPORTED)` ✅
|
|||
|
|
- 在事务外调用外部API
|
|||
|
|
- **其他方法**: 快速数据库操作,使用独立事务 ✅
|
|||
|
|
|
|||
|
|
#### 3. TaskStatusPollingService
|
|||
|
|
- **类级别**: 无 `@Transactional` ✅
|
|||
|
|
- **pollTaskStatus**: `@Transactional(propagation = Propagation.NOT_SUPPORTED)` ✅
|
|||
|
|
- 在事务外轮询外部API
|
|||
|
|
- **其他方法**: 快速数据库操作,使用独立事务 ✅
|
|||
|
|
|
|||
|
|
### ⚠️ 需要关注的服务
|
|||
|
|
|
|||
|
|
#### 4. TextToVideoService
|
|||
|
|
- **类级别**: `@Transactional` ⚠️
|
|||
|
|
- **createTask**: 继承类级别事务
|
|||
|
|
- ✅ 只做快速数据库操作(保存任务、添加到队列)
|
|||
|
|
- ✅ 没有调用外部API
|
|||
|
|
- ✅ 没有长时间运行的操作
|
|||
|
|
- **结论**: 虽然使用类级别事务,但方法快速完成,应该没问题
|
|||
|
|
|
|||
|
|
#### 5. ImageToVideoService
|
|||
|
|
- **类级别**: `@Transactional` ⚠️
|
|||
|
|
- **createTask**: 继承类级别事务
|
|||
|
|
- ✅ 只做快速数据库操作(保存任务、添加到队列)
|
|||
|
|
- ✅ 没有调用外部API
|
|||
|
|
- ✅ 没有长时间运行的操作
|
|||
|
|
- **结论**: 虽然使用类级别事务,但方法快速完成,应该没问题
|
|||
|
|
|
|||
|
|
#### 6. UserWorkService
|
|||
|
|
- **类级别**: `@Transactional` ⚠️
|
|||
|
|
- **所有方法**: 都是快速数据库操作
|
|||
|
|
- ✅ 没有调用外部API
|
|||
|
|
- ✅ 没有长时间运行的操作
|
|||
|
|
- **结论**: 应该没问题
|
|||
|
|
|
|||
|
|
### 📊 总结
|
|||
|
|
|
|||
|
|
#### 长时间运行的方法(已正确配置)
|
|||
|
|
1. ✅ `StoryboardVideoService.processTaskAsync` - `NOT_SUPPORTED` + `@Async`
|
|||
|
|
2. ✅ `TaskQueueService.processPendingTasks` - `NOT_SUPPORTED`
|
|||
|
|
3. ✅ `TaskQueueService.processTask` - `NOT_SUPPORTED`
|
|||
|
|
4. ✅ `TaskQueueService.checkTaskStatuses` - `NOT_SUPPORTED`
|
|||
|
|
5. ✅ `TaskQueueService.checkTaskStatusInternal` - `NOT_SUPPORTED`
|
|||
|
|
6. ✅ `TaskStatusPollingService.pollTaskStatus` - `NOT_SUPPORTED`
|
|||
|
|
|
|||
|
|
#### 快速事务方法(已正确配置)
|
|||
|
|
- ✅ 所有 `readOnly = true` 的方法
|
|||
|
|
- ✅ 所有独立的 `@Transactional` 方法(快速数据库操作)
|
|||
|
|
- ✅ `StoryboardVideoService.createTask` - `REQUIRES_NEW`(快速提交)
|
|||
|
|
|
|||
|
|
#### 潜在问题
|
|||
|
|
- ⚠️ `TextToVideoService` 和 `ImageToVideoService` 有类级别 `@Transactional`
|
|||
|
|
- 但它们的 `createTask` 方法都是快速操作,应该没问题
|
|||
|
|
- 如果未来需要在这些方法中调用外部API,需要添加 `NOT_SUPPORTED`
|
|||
|
|
|
|||
|
|
## 建议
|
|||
|
|
|
|||
|
|
### 当前状态
|
|||
|
|
✅ **所有事务配置都是正确的,应该能正常关闭**
|
|||
|
|
|
|||
|
|
### 最佳实践建议
|
|||
|
|
1. ✅ 长时间运行的方法都使用了 `NOT_SUPPORTED`
|
|||
|
|
2. ✅ 异步方法都正确配置了 `@Async`
|
|||
|
|
3. ✅ 快速事务方法都快速完成
|
|||
|
|
4. ⚠️ 考虑移除 `TextToVideoService` 和 `ImageToVideoService` 的类级别 `@Transactional`,改为方法级别配置,以提高灵活性
|
|||
|
|
|
|||
|
|
## 结论
|
|||
|
|
**✅ 所有事务都能正常关闭,没有发现连接泄漏风险**
|
|||
|
|
|
|||
|
|
|