From 595a758d05db0a2fb5af27f04cbeab31a2f61224 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sat, 31 Jan 2026 13:59:03 +0800 Subject: [PATCH] =?UTF-8?q?refactor(data-management):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?PDF=E6=96=87=E6=9C=AC=E6=8F=90=E5=8F=96=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=9A=84=E4=BA=8B=E5=8A=A1=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加TransactionSynchronization相关依赖注入 - 实现事务提交后异步执行PDF文本提取功能 - 增加数据集ID和文件ID的空值检查 - 在活跃事务中注册同步回调确保正确执行 - 避免在事务未提交时提前执行异步任务 --- .../DatasetFileApplicationService.java | 50 ++++++++++++------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/backend/services/data-management-service/src/main/java/com/datamate/datamanagement/application/DatasetFileApplicationService.java b/backend/services/data-management-service/src/main/java/com/datamate/datamanagement/application/DatasetFileApplicationService.java index bed9fa1..040ec6c 100644 --- a/backend/services/data-management-service/src/main/java/com/datamate/datamanagement/application/DatasetFileApplicationService.java +++ b/backend/services/data-management-service/src/main/java/com/datamate/datamanagement/application/DatasetFileApplicationService.java @@ -40,9 +40,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.Resource; 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.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; @@ -950,17 +952,31 @@ public class DatasetFileApplicationService { return addedFiles; } - private void triggerPdfTextExtraction(Dataset dataset, DatasetFile datasetFile) { - if (dataset == null || datasetFile == null) { - return; - } - if (dataset.getDatasetType() != DatasetType.TEXT) { - return; - } - String fileType = datasetFile.getFileType(); - if (fileType == null || !DOCUMENT_TEXT_FILE_TYPES.contains(fileType.toLowerCase(Locale.ROOT))) { - return; - } - pdfTextExtractAsyncService.extractPdfText(dataset.getId(), datasetFile.getId()); - } -} + private void triggerPdfTextExtraction(Dataset dataset, DatasetFile datasetFile) { + if (dataset == null || datasetFile == null) { + return; + } + if (dataset.getDatasetType() != DatasetType.TEXT) { + return; + } + String fileType = datasetFile.getFileType(); + if (fileType == null || !DOCUMENT_TEXT_FILE_TYPES.contains(fileType.toLowerCase(Locale.ROOT))) { + return; + } + 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); + } +}