將描述通過 <tx:advice/>
標簽來指定不同的事務性設置。默認的 <tx:advice/>
設置如下:
-
事務傳播設置是
REQUIRED
-
隔離級別是
DEFAULT
-
事務是 讀/寫
-
事務超時默認是依賴於事務系統的,或者事務超時沒有被支持。
-
任何
RuntimeException
將觸發事務回滾,但是任何 checkedException
將不觸發事務回滾
這些默認的設置當然也是可以被改變的。 <tx:advice/>
和 <tx:attributes/>
標簽里的<tx:method/>
各種屬性設置總結如下:
<tx:method/>
有關的設置
屬性 | 是否需要? | 默認值 | 描述 |
---|---|---|---|
name |
是 | 與事務屬性關聯的方法名。通配符(*)可以用來指定一批關聯到相同的事務屬性的方法。 如: |
|
propagation |
不 | REQUIRED | 事務傳播行為 |
isolation |
不 | DEFAULT | 事務隔離級別 |
timeout |
不 | -1 | 事務超時的時間(以秒為單位) |
read-only |
不 | false | 事務是否只讀? |
rollback-for |
不 | 將被觸發進行回滾的 |
|
no-rollback-for |
不 | 不 被觸發進行回滾的 |
Spring中propagation類的事務屬性詳解
- PROPAGATION_REQUIRED: 支持當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。
- PROPAGATION_SUPPORTS: 支持當前事務,如果當前沒有事務,就以非事務方式執行。
- PROPAGATION_MANDATORY: 支持當前事務,如果當前沒有事務,就拋出異常。
- PROPAGATION_REQUIRES_NEW: 新建事務,如果當前存在事務,把當前事務掛起。
- PROPAGATION_NOT_SUPPORTED:以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
- PROPAGATION_NEVER: 以非事務方式執行,如果當前存在事務,則拋出異常。
- PROPAGATION_NESTED: 支持當前事務,如果當前事務存在,則執行一個嵌套事務,如果當前沒有事務,就新建一個事務