默認狀況下,spring框架只捕獲RuntimeException異常及其子類;對於Exception異常是不會回滾的,若是相讓Spring來改變這種默認的行爲,那麼能夠在相應的方法上面加入@Transactional(rollbackFor=MyException.class)設置成回滾,從而改變默認的行爲。spring
令Spring的幾種註解事務傳播行爲 :
Required:業務方法須要在一個事務中運行。若是方法運行時,已經在一個事務中,那麼加入到該事務,不然本身建立一個新的事務。通常spring默認都是這種事務,像保存,刪除,修改等都是這種事務。80%的狀況下都用這種事務。
Not_Supported:聲明方法不須要事務。若是方法沒有關聯到一個事務,容器不會爲它開啓事務。若是方法在一個事務中被調用,該事務會被掛起,在方法調用結束後,原先的事務便會執行。
Requiresnew:屬性無論是否存在事務,業務方法總會爲本身發起一個新的事務。若是方法已經運行在一個事務中,則原有事務被掛起,新的事務會被建立,直到方法執行結束,新事務纔算結束,原先事務纔會恢復執行。
Mandatory:該屬性指定業務方法必須在一個事務中運行,業務方法不能發起本身的事略。若是業務方法在沒有事務的環境下調用,容器會拋出例外。
Supports:這一事務屬性代表,若是方法在某個事務範圍內被調用,則方法成爲該事務的一部分。若是業務方法在事務範圍外被調用,則方法在沒有事務的環境下執行。
Never:指定業務方法絕對不能在事務範圍內執行。若是業務方法在某個事務中執行,容器會拋出例外,只有業務方法沒有關聯到任何事務,才能正常執行。框架
Nested:若是一個活動的事務存在,則運行在一個嵌套的事務中,若是沒有活動事務,則按Required屬性執行,它使用了一個單獨的事務, 這個事務擁有多個能夠回滾的保存點。內部事務的回滾不會對外部事務形成影響,它只對DataSourceTransactionManager事務管理器 起效。ui