1.默認spring事務只在發生未被捕獲的 RuntimeException 時纔回滾。
spring aop 異常捕獲原理:被攔截的方法需顯式拋出異常,並不能經任何處理,這樣aop代理才能捕獲到方法的異常,才能進行回滾,默認狀況下aop只捕獲 RuntimeException 的異常,但能夠經過配置來捕獲特定的異常並回滾 。spring
添加@Transactional(rollbackFor = Exception.class)進行普通異常回滾。
2.嵌套事務代理
內部事務獨立回滾,能夠用 Propagation.REQUIRES_NEW事務
@Transactional(propagation = Propagation.REQUIRES_NEW,rollbackFor = Exception.class)3. 方法的@Transactional會覆蓋類上的@Transactional