Spring 事务不起作用的几种情况
Posted hanguocai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 事务不起作用的几种情况相关的知识,希望对你有一定的参考价值。
1:必须是runtime异常,方法不要有try catch语句。
2:service 中
@Service() public class AServiceImpl1 implements AService{ @Transactional(propagation = Propagation.REQUIRED) public void a() { this.b(); } @Transactional(propagation = Propagation.REQUIRES_NEW) public void b() { } }
这种情况 b的事务不起作用,a的事务起作用,想让b事务起作用,俩种方法:
一:
this.b();-----------修改为--------->((AService) AopContext.currentProxy()).b();
二:
@Service public class AServiceImpl3 implements AService{ @Autowired //① 注入上下文 private ApplicationContext context; private AService proxySelf; //② 表示代理对象,不是目标对象 @PostConstruct //③ 初始化方法 private void setSelf() { //从上下文获取代理对象(如果通过proxtSelf=this是不对的,this是目标对象) //此种方法不适合于prototype Bean,因为每次getBean返回一个新的Bean proxySelf = context.getBean(AService.class); } @Transactional(propagation = Propagation.REQUIRED) public void a() { proxySelf.b(); //④ 调用代理对象的方法 这样可以执行事务切面 } @Transactional(propagation = Propagation.REQUIRES_NEW) public void b() { } }
以上是关于Spring 事务不起作用的几种情况的主要内容,如果未能解决你的问题,请参考以下文章