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 cn.iocoder.yudao.module.tik.voice.vo.AppTikVoiceTtsRespVO;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
|
import cn.hutool.extra.spring.SpringUtil;
|
||||||
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.scheduling.annotation.Async;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
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 org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
@@ -325,9 +328,15 @@ public class TikUserVoiceServiceImpl implements TikUserVoiceService {
|
|||||||
throw exception(VOICE_FILE_NOT_EXISTS);
|
throw exception(VOICE_FILE_NOT_EXISTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. 异步执行识别
|
// 4. 事务提交后再异步执行识别,避免异步线程读不到未提交的数据
|
||||||
String fileAccessUrl = fileApi.presignGetUrl(fileDO.getUrl(), PRESIGN_URL_EXPIRATION_SECONDS);
|
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
|
@Override
|
||||||
@@ -970,5 +979,12 @@ public class TikUserVoiceServiceImpl implements TikUserVoiceService {
|
|||||||
return "您好,欢迎体验专属音色。";
|
return "您好,欢迎体验专属音色。";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过 Spring 代理获取自身,确保 @Async 注解生效
|
||||||
|
*/
|
||||||
|
private TikUserVoiceServiceImpl getSelf() {
|
||||||
|
return SpringUtil.getBean(getClass());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user