1. 程式人生 > >Spring 事務不起作用的幾種情況

Spring 事務不起作用的幾種情況

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 事務不起作用的幾種情況