主要更新: - 调整并发配置为50人(数据库连接池30,Tomcat线程150,异步线程池5/20) - 实现无界阻塞队列(LinkedBlockingQueue)任务处理 - 实现分镜视频保存功能(保存到uploads目录) - 统一管理页面导航栏和右上角样式 - 添加日活用户统计功能 - 优化视频拼接和保存逻辑 - 添加部署文档和快速部署指南 - 更新.gitignore排除敏感配置文件
95 lines
4.0 KiB
Markdown
95 lines
4.0 KiB
Markdown
# 事务使用情况完整报告
|
||
|
||
## 检查时间
|
||
2025-11-06
|
||
|
||
## 检查范围
|
||
所有服务类中的 `@Transactional` 使用情况
|
||
|
||
## 检查结果
|
||
|
||
### ✅ 已修复的服务
|
||
|
||
#### 1. StoryboardVideoService
|
||
- **类级别**: 无 `@Transactional` ✅
|
||
- **createTask**: `@Transactional(propagation = Propagation.REQUIRES_NEW)` ✅
|
||
- **processTaskAsync**: `@Async` + `@Transactional(propagation = Propagation.NOT_SUPPORTED)` ✅
|
||
- 内部调用使用 `REQUIRES_NEW` 的私有方法:
|
||
- `loadTaskInfoInNewTransaction` - `REQUIRES_NEW` + `readOnly = true` ✅
|
||
- `updateTaskStatusInNewTransaction` - `REQUIRES_NEW` ✅
|
||
- `saveStoryboardImageResultInNewTransaction` - `REQUIRES_NEW` ✅
|
||
- `updateTaskStatusToFailedInNewTransaction` - `REQUIRES_NEW` ✅
|
||
- **其他方法**: 快速数据库操作,使用独立事务 ✅
|
||
|
||
### ⚠️ 需要注意的服务
|
||
|
||
#### 2. TextToVideoService
|
||
- **类级别**: `@Transactional` ⚠️
|
||
- **createTask**: 继承类级别事务
|
||
- ✅ 只做快速数据库操作,无外部API调用
|
||
- **processTaskWithRealAPI**: `@Async` + 继承类级别事务 ⚠️
|
||
- ⚠️ 直接使用 `taskRepository.save(task)`,会继承类级别事务
|
||
- ⚠️ 在异步方法中调用外部API,可能导致连接泄漏
|
||
- **状态**: 此方法**未被调用**(任务通过 TaskQueueService 处理),不会导致实际泄漏
|
||
- **建议**: 如果未来需要使用,应添加 `NOT_SUPPORTED` 并使用 `REQUIRES_NEW` 的私有方法
|
||
|
||
#### 3. ImageToVideoService
|
||
- **类级别**: `@Transactional` ⚠️
|
||
- **createTask**: 继承类级别事务
|
||
- ✅ 只做快速数据库操作,无外部API调用
|
||
- **processTaskWithRealAPI**: `@Async` + 继承类级别事务 ⚠️
|
||
- ⚠️ 直接使用 `taskRepository.save(task)`,会继承类级别事务
|
||
- ⚠️ 在异步方法中调用外部API,可能导致连接泄漏
|
||
- **状态**: 此方法**未被调用**(任务通过 TaskQueueService 处理),不会导致实际泄漏
|
||
- **建议**: 如果未来需要使用,应添加 `NOT_SUPPORTED` 并使用 `REQUIRES_NEW` 的私有方法
|
||
|
||
### ✅ 正确配置的服务
|
||
|
||
#### 4. TaskQueueService
|
||
- **类级别**: `@Transactional` ⚠️
|
||
- **processPendingTasks**: `@Transactional(propagation = Propagation.NOT_SUPPORTED)` ✅
|
||
- **processTask**: `@Transactional(propagation = Propagation.NOT_SUPPORTED)` ✅
|
||
- **checkTaskStatuses**: `@Transactional(propagation = Propagation.NOT_SUPPORTED)` ✅
|
||
- **checkTaskStatusInternal**: `@Transactional(propagation = Propagation.NOT_SUPPORTED)` ✅
|
||
- **其他方法**: 快速数据库操作,使用独立事务 ✅
|
||
|
||
#### 5. TaskStatusPollingService
|
||
- **类级别**: 无 `@Transactional` ✅
|
||
- **pollTaskStatus**: `@Transactional(propagation = Propagation.NOT_SUPPORTED)` ✅
|
||
- **其他方法**: 快速数据库操作,使用独立事务 ✅
|
||
|
||
#### 6. UserWorkService
|
||
- **类级别**: `@Transactional` ⚠️
|
||
- **所有方法**: 快速数据库操作,无外部API调用 ✅
|
||
|
||
#### 7. UserService
|
||
- **类级别**: 无 `@Transactional` ✅
|
||
- **所有方法**: 快速数据库操作,使用独立事务 ✅
|
||
|
||
#### 8. PaymentService
|
||
- **类级别**: `@Transactional` ⚠️
|
||
- **所有方法**: 快速数据库操作,无外部API调用 ✅
|
||
|
||
#### 9. OrderService
|
||
- **类级别**: `@Transactional` ⚠️
|
||
- **所有方法**: 快速数据库操作,无外部API调用 ✅
|
||
|
||
## 总结
|
||
|
||
### 当前状态
|
||
✅ **所有实际使用的异步方法都已正确配置,不会导致连接泄漏**
|
||
|
||
### 潜在问题(但未实际使用)
|
||
⚠️ `TextToVideoService.processTaskWithRealAPI` 和 `ImageToVideoService.processTaskWithRealAPI` 有潜在问题,但**未被调用**,不会导致实际泄漏
|
||
|
||
### 建议
|
||
1. ✅ 当前配置正确,无需修改
|
||
2. ⚠️ 如果未来需要使用 `processTaskWithRealAPI` 方法,应按照 `StoryboardVideoService` 的模式修复:
|
||
- 在异步方法上添加 `@Transactional(propagation = Propagation.NOT_SUPPORTED)`
|
||
- 创建使用 `REQUIRES_NEW` 的私有方法进行数据库操作
|
||
|
||
## 结论
|
||
**✅ 所有实际使用的事务配置都是正确的,不会导致连接泄漏**
|
||
|
||
|