自调用导致事务无法回滚

写事务时报了这样一个错org.springframework.transaction.NoTransactionException: No transaction aspect-managed TransactionStatus in scope

此错在没有Transaction无法回滚事务。自调用导致@Transactional 失效。

spring里事务是用注解配置的,当一个方法没有接口,单单只是一个方法不是服务时,事务的注解是不起作用的,需要回滚时就会报错。

出现这个问题的根本原因在于AOP的实现原理。由于@Transactional 的实现原理是AOP,AOP的实现原理是动态代理,换句话说,自调用时不存在代理对象的调用,这时不会产生我们注解@Transactional 配置的参数,自然无效了。

虽然可以直接从容器中获取代理对象,但这样有侵入之嫌,不推荐。

也是在此记录一笔:

事务必须用在服务上,且一个服务一个事务,不得嵌套。

你可能感兴趣的:(java)