Spring中嵌套调用TransactionSynchronizationManager.registerSynchronization()不生效问题求助
Spring中嵌套调用TransactionSynchronizationManager.registerSynchronization()不生效问题求助
我最近碰到了一个Spring事务同步的问题,试了好几种方法都没解决,来求助各位大佬!
我写了三个关联的服务类,代码分别如下:
Service One
@Service @RequiredArgsConstructor public class TransactionAService { private final TransactionBService transactionBService; private final UserMapper userMapper; @Transactional(rollbackFor = Exception.class) public void transactionA() { User user = new User(); user.setUsername("apple-" + UUID.randomUUID().toString().replace("-", "").substring(0, 4)); user.setPassword("abc123"); userMapper.insert(user); TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { @Override public void afterCommit() { transactionBService.transactionB(); } }); } }
Service Two
@Service @RequiredArgsConstructor public class TransactionBService { private final TransactionCService transactionCService; private final UserMapper userMapper; @Transactional(rollbackFor = Exception.class) public void transactionB() { User user = new User(); user.setUsername("banana-" + UUID.randomUUID().toString().replace("-", "").substring(0, 4)); user.setPassword("abc123"); userMapper.insert(user); TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { @Override public void afterCommit() { transactionCService.transactionC(); } }); } }
Service Three
@Slf4j @Service @RequiredArgsConstructor public class TransactionCService { private final UserMapper userMapper; @Transactional(rollbackFor = Exception.class) public void transactionC() { log.info("hello cat"); User user = new User(); user.setUsername("cat-" + UUID.randomUUID().toString().replace("-", "").substring(0, 4)); user.setPassword("abc123"); userMapper.insert(user); } }
现在的问题是:当我调用transactionAService.transactionA()方法后,发现transactionCService.transactionC()完全没被执行!最后数据库的user表里只有两条数据——apple开头和banana开头的,cat开头的那条根本没插进去。
我用的Spring Boot版本是2.7.18,有没有大佬能帮忙分析下原因呀?万分感谢!
备注:内容来源于stack exchange,提问作者Garmin
相关产品推荐
相关产品推荐

