1.业务场景:一个大service里面,调用多个service假设a,b,c。
其中a成功,b里面失败。但是a中有操作数据库和异步放redis缓存操作,所以需要监听事务如果失败,需要回到a中删除缓存。
2.原理:同aop环绕通知,在事务执行前后我们需要做一些细节处理。使用
TransactionSynchronizationManager提供很多方法可以帮我们解决。
3.伪代码
1.多个service:
服务A
public interface ConsumeCodeTotalService {
void test1();
}
@Service
@Slf4j
public class ConsumeCodeTotalServiceImpl implements ConsumeCodeTotalService {
@Override
public void test1() {
//执行第一个成功
log.info("=================test1.1============");
//执行第二个
log.info("================test1.2=============");
if (TransactionSynchronizationManager.isActualTransactionActive()) {
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void afterCompletion(int status) {

本文介绍了在多级调用服务中,如何利用TransactionSynchronizationManager来监听事务状态,确保在事务失败时能正确回滚数据库操作并删除已设置的Redis缓存。通过具体的业务场景和伪代码示例,详细阐述了在有事务和无事务情况下,如何实现事务的管理和缓存同步管理。
最低0.47元/天 解锁文章
167

被折叠的 条评论
为什么被折叠?



