知識點:java事務屬性
Propagation取值:
REQUIRED(默認值):在有transaction狀態下執行;如當前沒有transaction,則創建新的transaction;
SUPPORTS:如當前有transaction,則在transaction狀態下執行;如果當前沒有transaction,在無transaction狀態下執行;
MANDATORY:必須在有transaction狀態下執行,如果當前沒有transaction,則拋出異常IllegalTransactionStateException;
REQUIRES_NEW:創建新的transaction並執行;如果當前已有transaction,則將當前transaction掛起;
NOT_SUPPORTED:在無transaction狀態下執行;如果當前已有transaction,則將當前transaction掛起;
NEVER:在無transaction狀態下執行;如果當前已有transaction,則拋出異常IllegalTransactionStateException。
1、場景--->並行事務:
並行事務:
A:方法事務為默認的REQUIRED
B:方法事務為 REQUIRES_NEW 或者 REQUIRED
執行結果:
結論:並行事務不存在事務影響
2、場景--->嵌套相同事務:
a) 事務嵌套,在同一個事務中,沒有對異常進行處理
執行結果:兩個都沒有插入成功
結論:由於兩個都是在一個事務當中,所以只要有一個方法事務有問題,那么都不會插入成功。
b) 事務嵌套,在同一個事務中,對異常進行處理
執行結果:兩個都插入成功。
結論:如果事務存在異常,並進行捕獲處理,不會影響事務。
3、場景--->嵌套不同事務:
a)事務嵌套,在不同事務中,沒有對異常進行處理
執行結果:都沒有插入成功。
結論:不同事務中,嵌套的事務,沒有對異常進行處理,都不會執行成功。
b)事務嵌套,在不同事務中,對異常進行處理
執行結果:都插入成功。
結論:不同事務,只要對異常進行捕獲並處理,都會執行成功
大結論:
1、在Java事務中,事務的嵌套,如果有事務成功,那么則都成功,否則都不會成功。
2、如果事務中存在異常,只要對異常進行捕獲和處理,都為執行成功,否則都不會執行成功。