This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user