Spring 事務不起作用的幾種情況
阿新 • • 發佈:2018-10-30
service() true bean 每次 語句 imp 作用 stc current
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 事務不起作用的幾種情況