From e4b0ed3d7489eda29d88c6bbcd3cd82b98af8322 Mon Sep 17 00:00:00 2001 From: sion123 <450702724@qq.com> Date: Sun, 26 Apr 2026 23:49:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/TikUserVoiceServiceImpl.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/voice/service/TikUserVoiceServiceImpl.java b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/voice/service/TikUserVoiceServiceImpl.java index 673de95102..9592e04952 100644 --- a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/voice/service/TikUserVoiceServiceImpl.java +++ b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/voice/service/TikUserVoiceServiceImpl.java @@ -39,9 +39,12 @@ import cn.iocoder.yudao.module.tik.voice.vo.AppTikVoiceTtsReqVO; import cn.iocoder.yudao.module.tik.voice.vo.AppTikVoiceTtsRespVO; import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.StringRedisTemplate; +import cn.hutool.extra.spring.SpringUtil; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.TransactionSynchronization; +import org.springframework.transaction.support.TransactionSynchronizationManager; import org.springframework.validation.annotation.Validated; import jakarta.annotation.Resource; @@ -325,9 +328,15 @@ public class TikUserVoiceServiceImpl implements TikUserVoiceService { throw exception(VOICE_FILE_NOT_EXISTS); } - // 4. 异步执行识别 + // 4. 事务提交后再异步执行识别,避免异步线程读不到未提交的数据 String fileAccessUrl = fileApi.presignGetUrl(fileDO.getUrl(), PRESIGN_URL_EXPIRATION_SECONDS); - asyncTranscribeVoice(id, fileAccessUrl); + TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { + @Override + public void afterCommit() { + log.info("[transcribeVoice][voiceId={}] 事务已提交,触发异步识别", id); + getSelf().asyncTranscribeVoice(id, fileAccessUrl); + } + }); } @Override @@ -970,5 +979,12 @@ public class TikUserVoiceServiceImpl implements TikUserVoiceService { return "您好,欢迎体验专属音色。"; } + /** + * 通过 Spring 代理获取自身,确保 @Async 注解生效 + */ + private TikUserVoiceServiceImpl getSelf() { + return SpringUtil.getBean(getClass()); + } + }