《Spring高級程序設計》第16章事務管理,通過本章的學習,你知道了如何使用Spring去管理事務,而這種方式幾乎不會對你的源代碼產生任何影響。你現在知道了如何使用本地和全局事務,並知道了如何用活動事務來同步你的代碼。 本節為tx:advice標簽簡介。
AD:
16.6.3 tx:advice標簽簡介
正如在代碼清單16-23中所見,你需要在<tx:advice/>標簽內設置id和transaction-manager屬性。 id是該advice bean的標識,而transaction-manager則必須引用一個PlatformTransactionManager bean。
除了這兩個屬性以外,你還可以通過<tx:attributes />標簽定制<tx:advice />標簽所創建的通知的行為。這可以讓你對transactionAttributes屬性表達式所支持的屬性以更加結構化的方式進行配置。讓我們 看看代碼清單16-24,它展示了一個更復雜的<tx:advice />標簽。
代碼清單16-24 一個更復雜的<tx:advice />標簽
我們的事務通知所開啟的事務針對所有方法(只要方法名不以get開頭)的傳播為PROPAGATION_ REQUIRED隔離級別為READ_COMMITTED,超時為100 s。在這種情況下,事務定義將包括PROPAGATION_DEFAULT、ISOLATION_DEFAULT、TIMEOUT_DEFAULT,同時 read-only屬性被設為true。在上面這兩種情況下,任何運行時異常都會導致回滾。
正如你所見,憑借<tx:attributes />標簽我們可以用更加簡練的方式創建transactionAttributes屬性表達式。此外,大多數IDE都提供了代碼完成功能(參見圖16-2)。
![]() |
<tx:attributes />標簽只接受<tx:method />標簽作為其子元素。表16-5詳細說明了<tx:method />標簽的屬性。
表16-5 <tx:method />標簽的屬性
屬性
|
說明 |
name |
方法名的匹配模式,通知根據該模式尋找匹配的方法。 該屬性可以使用asterisk (*)通配符 |
propagation |
設定事務定義所用的傳播級別 |
isolation |
設定事務的隔離級別 |
timeout |
指定事務的超時(單位為秒) |
read-only |
該屬性為true指示事務是只讀的(典型地, 對於只執行查詢的事務你會將該屬性設為true, 如果出現了更新、插入或是刪除語句時只讀事務就會失敗) |
no-rollback-for |
以逗號分隔的異常類的列表,目標方法可以拋出 這些異常而不會導致通知執行回滾 |
rollback-for |
以逗號分隔的異常類的列表,當目標方法拋出這些 異常時會導致通知執行回滾。默認情況下,該列表為空, 因此不在no-rollback-for列表中的任何運行 時異常都會導致回滾 |