spring管理事務需要注意的


org.springframework.transaction.NoTransactionException: No transaction aspect-managed TransactionStatus in scope

使用spring事務注解的時候遇到過這個問題嗎?

 

下面我們來看兩種寫法,第一種

@Transactional
    public UserEntity login1(UserEntity user) {
        userDao.update(6);
        if(userDao.update(6)){
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }
        return user;
    }

第二種

public UserEntity login(UserEntity user) {
        this.test();
        return user;
    }
    
    @Transactional
    public void test(){
        userDao.update(6);
        if(userDao.update(6)){
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }
    }

第一種寫法的時候,回滾是起作用的,而第二種寫法的時候就會報錯,錯誤就是一開始提到的。

為什么會這樣呢?

 

sping的事務是通過注解配置上去的,而下面的那個方法並沒有接口,在實現類里面只是一個簡單的方法而已,對於事務的注解來說沒有任何作用,所以在這個方法里面調用回滾的方法自然就報錯了。

 

所以在以后的項目中如果你要使用事務,那么請記住,一個服務一個事務,一次請求一個事務,千萬不要想着用調用方法,然后再一個方法上面加事務。你只能調用另外一個服務,在另外一個服務上面加事務。

 

最后讓我想到要測試這個問題是這樣一篇博客,這邊也記錄一下,提醒一下自己。

http://www.cnblogs.com/nick-huang/p/5762562.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM