Spring事務傳播行爲類型:java
事務傳播行爲類型 | 說明 |
PROPAGATION_REQUIRED | 若是當前沒有事務,就新建一個事務,若是已經存在一個事務中,加入到這個事務中。這是最多見的選擇。 |
PROPAGATION_SUPPORTS | 支持當前事務,若是當前沒有事務,就以非事務方式執行。 |
PROPAGATION_MANDATORY | 使用當前的事務,若是當前沒有事務,就拋出異常。 |
PROPAGATION_REQUIRES_NEW | 新建事務,若是當前存在事務,把當前事務掛起。 |
PROPAGATION_NOT_SUPPORTED | 以非事務方式執行操做,若是當前存在事務,就把當前事務掛起。 |
PROPAGATION_NEVER | 以非事務方式執行,若是當前存在事務,則拋出異常。 |
PROPAGATION_NESTED | 若是當前存在事務,則在嵌套事務內執行。若是當前沒有事務,則執行與PROPAGATION_REQUIRED類 似的操做。 |
spring 事務註解 默認遇到throw new RuntimeException("...");會回滾 須要捕獲的throw new Exception("...");不會回滾 // 指定回滾@Transactional(rollbackFor=Exception.class) public void methodName() { // 不會回滾 throw new Exception("..."); } //指定不回滾@Transactional(noRollbackFor=Exception.class) public ItimDaoImpl getItemDaoImpl() { // 會回滾 throw new RuntimeException("註釋"); } // 若是有事務,那麼加入事務,沒有的話新建一個(不寫的狀況下) @Transactional(propagation=Propagation.REQUIRED) // 容器不爲這個方法開啓事務 @Transactional(propagation=Propagation.NOT_SUPPORTED) // 無論是否存在事務,都建立一個新的事務,原來的掛起,新的執行完畢,繼續執行老的事務 @Transactional(propagation=Propagation.REQUIRES_NEW) // 必須在一個已有的事務中執行,不然拋出異常 @Transactional(propagation=Propagation.MANDATORY) // 必須在一個沒有的事務中執行,不然拋出異常(與Propagation.MANDATORY相反) @Transactional(propagation=Propagation.NEVER) // 若是其餘bean調用這個方法,在其餘bean中聲明事務,那就用事務.若是其餘bean沒有聲明事務,那就不用事務. @Transactional(propagation=Propagation.SUPPORTS) /* public void methodName(){ // 本類的修改方法 1 update(); // 調用其餘類的修改方法 otherBean.update(); // 本類的修改方法 2 update(); } other失敗了不會影響 本類的修改提交成功 本類update的失敗,other也失敗 */ @Transactional(propagation=Propagation.NESTED) // readOnly=true只讀,能插入,但不能更新,刪除 @Transactional (propagation = Propagation.REQUIRED,readOnly=true) // 設置超時時間 @Transactional (propagation = Propagation.REQUIRED,timeout=30) // 設置數據庫隔離級別 @Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)