标签:public 必须 required stc self runtime 调用 contex prot
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() { } }
标签:public 必须 required stc self runtime 调用 contex prot
原文地址:https://www.cnblogs.com/hanguocai/p/9876685.html