refactor(data-management): 优化PDF文本提取服务的事务处理

- 添加TransactionSynchronization相关依赖注入
- 实现事务提交后异步执行PDF文本提取功能
- 增加数据集ID和文件ID的空值检查
- 在活跃事务中注册同步回调确保正确执行
- 避免在事务未提交时提前执行异步任务
This commit is contained in:
2026-01-31 13:59:03 +08:00
parent 4fa0ac1df4
commit 595a758d05

View File

@@ -43,6 +43,8 @@ import org.springframework.core.io.UrlResource;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import java.io.File;
import java.io.IOException;
@@ -961,6 +963,20 @@ public class DatasetFileApplicationService {
if (fileType == null || !DOCUMENT_TEXT_FILE_TYPES.contains(fileType.toLowerCase(Locale.ROOT))) {
return;
}
pdfTextExtractAsyncService.extractPdfText(dataset.getId(), datasetFile.getId());
String datasetId = dataset.getId();
String fileId = datasetFile.getId();
if (datasetId == null || fileId == null) {
return;
}
if (TransactionSynchronizationManager.isSynchronizationActive()) {
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
public void afterCommit() {
pdfTextExtractAsyncService.extractPdfText(datasetId, fileId);
}
});
return;
}
pdfTextExtractAsyncService.extractPdfText(datasetId, fileId);
}
}