Springboot事務失效原因

Liang2003發表於2024-11-09

Springboot 事務失效原因

  1. @Transactional 註解 只能作用於public方法上,如果不是的話編譯報錯
  2. @Transactional 註解預設當發生RunTimeException才會回滾,如果發生其他異常不會,解決方法
@Transactional(rollbackFor = Exception.class)
  1. 自呼叫問題,假設一個service有一個事務方法a和一個普通方法b,a呼叫b事務不會失效,但反過來b呼叫a會導致事務失效,解決這個問題可以透過aop代理,或者在service裡再注入這個service(假設它為XXservice),在b方法裡透過XXservice呼叫a方法,反正就是要避開自呼叫
@Service
public class XXservice {

    @Autowired
    XXservice xxservice2; //注入一個相同的例項

    @Transactional(rollbackFor = Exception.class)
    public String a(){
        //執行相關的資料庫操作
        return "A";
    }

    public String b(){
        
        xxservice2.a(); 
      
        return "B";
    }

}

相關文章