Spring使用註解聲明事務

  • 2019 年 10 月 5 日
  • 筆記

在上一篇中我們已經簡單的介紹了用xml的方式聲明事務,spring中除了上述方式外,還可以直接使用註解的方式管理事務,也就是通過@Transactional註解對需要的事務進行事務管理的。@Transactional註解可以對類或者方法進行標註。下面我們使用測試用例來演示@Transactional註解的具體使用。

因為@Transactional註解有默認的事務屬性,所以只需要添加上述註解即可完成對事務的管理。但有一個問題我們要注意,就是雖然上述註解有默認事務功能,但是我們知道,事務的註解底層是通過AOP的方式實現事務管理的,所以我們還需要的配置spring中的xml,使之讓spring支援對@Transactional註解的支援。具體配置如下:

上述配置是最簡單的配置,實際上<tx:annotation-driven>標籤還有別外兩個屬性,下面我們看一下這兩個屬性的具體功能。

下面我們看一下@Transactional註解的相關默認屬性都有哪些。

  • 事務傳播行為–:PROPAGATION_REQUIRED
  • 事務隔離級別–:ISOLATION_DEFAULT
  • 讀寫事務屬性–:讀/寫事務
  • 超時時間–:依賴底層的事務屬性默認值
  • 回滾設置–:運行期異常回滾

上述介紹的是@Transactional註解的默認設置,雖然很常用,但不一定能滿足我們所有的需求,所以,spring還提供我們手動設置上述默認註解的功能。具體的配置如下:

下面我們介紹一下@Transactional註解的注意事項

  • @Transactional註解可以被應用於介面定義介面方法、類定義、和類的public方法上。但spring建議我們將@Transactional註解最好標註在業務類的上。這是因為註解不能被繼承,所以,如果我們將@Transactional註解標註在介面上時,那麼它的子類由於無法繼承,所以,此時的子類,spring是不會進行事務管理的。
  • 如果一個類已經使用了@Transactional註解,這時spring就會將這個類中所有的public方法上都添加事務管理,如果我們此時又在public方法上添加的方法級別的@Transactional註解,那麼spring默認會用方法的註解覆蓋類上面的@Transactional註解。