查看spring API可知 http://www.kuqin.com/spring2.0_doc/index.html html
對EJB來講,默認的行爲是EJB容器在遇到系統異常 (一般指運行時異常)時自動回滾當前事務。EJB CMT遇到應用異常 (例如,除了java.rmi.RemoteException 外別的checked exception)時並不會自動回滾。默認式Spring處理聲明式事務管理的規則遵照EJB習慣(只在遇到unchecked exceptions時自動回滾),但一般定製這條規則會更有用。java
因此spring
package x.y.service;
public class DefaultFooService implements FooService {
public Foo getFoo(String fooName) {
throw new UnsupportedOperationException();
}
public Foo getFoo(String fooName, String barName) {
throw new UnsupportedOperationException();
}
public void insertFoo(Foo foo) {
throw new UnsupportedOperationException();
}
public void updateFoo(Foo foo) {
throw new UnsupportedOperationException();
}
}spa
(對該例的目的來講,上例中實現類(DefaultFooService )的每一個方法在其方法體中拋出UnsupportedOperationException 的作法是恰當的,咱們能夠看到,事務被建立出來,響應UnsupportedOperationException 的拋出,而後回滾。) htm
@Transactional 有關的設置blog
在最簡單的形式下,@Transactional 指定一個接口、類、方法必須是事務性的,其默認事務語義爲:read/write,PROPAGATION_REQUIRED ,ISOLATION_DEFAULT ,TIMEOUT_DEFAULT ,並且僅當遇到RuntimeException 時回滾,而不是Exception 。接口
改變事務設置的其餘可選屬性事務
Table 9.1. Transactional 註解的屬性 get
屬性 | 類型 | 描述 |
---|---|---|
傳播性 | 枚舉型:Propagation | 可選的傳播性設置 (默認值:PROPAGATION_REQUIRED ) |
隔離性 | 枚舉型:Isolation | 可選的隔離性級別(默認值:ISOLATION_DEFAULT ) |
只讀性 | 布爾型 | 讀寫型事務 vs. 只讀型事務(默認值:false ,即只讀型事務) |
回滾異常類(rollbackFor) | 一組 Class 類的實例,必須是Throwable 的子類 | 一組異常類,遇到時 確保 進行回滾。默認狀況下checked exceptions不進行回滾,僅unchecked exceptions(即RuntimeException 的子類)才進行事務回滾。 |
回滾異常類名(rollbackForClassname) | 一組 Class 類的名字,必須是Throwable 的子類 | 一組異常類名,遇到時 確保 進行回滾 |
不回滾異常類(noRollbackFor) | 一組 Class 類的實例,必須是Throwable 的子類 | 一組異常類,遇到時確保 不 回滾。 |
不回滾異常類名(noRollbackForClassname) | 一組 Class 類的名字,必須是Throwable 的子類 | 一組異常類,遇到時確保 不 回滾 |
屬性 | 類型 | 描述 |
---|---|---|
傳播性 | 枚舉型:Propagation | 可選的傳播性設置 (默認值:PROPAGATION_REQUIRED ) |
隔離性 | 枚舉型:Isolation | 可選的隔離性級別(默認值:ISOLATION_DEFAULT ) |
只讀性 | 布爾型 | 讀寫型事務 vs. 只讀型事務(默認值:false ,即只讀型事務) |
回滾異常類(rollbackFor) | 一組 Class 類的實例,必須是Throwable 的子類 | 一組異常類,遇到時 確保 進行回滾。默認狀況下checked exceptions不進行回滾,僅unchecked exceptions(即RuntimeException 的子類)才進行事務回滾。 |
回滾異常類名(rollbackForClassname) | 一組 Class 類的名字,必須是Throwable 的子類 | 一組異常類名,遇到時 確保 進行回滾 |
不回滾異常類(noRollbackFor) | 一組 Class 類的實例,必須是Throwable 的子類 | 一組異常類,遇到時確保 不 回滾。 |
不回滾異常類名(noRollbackForClassname) | 一組 Class 類的名字,必須是Throwable 的子類 | 一組異常類,遇到時確保 不 回滾 |
屬性 | 類型 | 描述 |
---|---|---|
傳播性 | 枚舉型:Propagation | 可選的傳播性設置 (默認值:PROPAGATION_REQUIRED ) |
隔離性 | 枚舉型:Isolation | 可選的隔離性級別(默認值:ISOLATION_DEFAULT ) |
只讀性 | 布爾型 | 讀寫型事務 vs. 只讀型事務(默認值:false ,即只讀型事務) |
回滾異常類(rollbackFor) | 一組 Class 類的實例,必須是Throwable 的子類 | 一組異常類,遇到時 確保 進行回滾。默認狀況下checked exceptions不進行回滾,僅unchecked exceptions(即RuntimeException 的子類)才進行事務回滾。 |
回滾異常類名(rollbackForClassname) | 一組 Class 類的名字,必須是Throwable 的子類 | 一組異常類名,遇到時 確保 進行回滾 |
不回滾異常類(noRollbackFor) | 一組 Class 類的實例,必須是Throwable 的子類 | 一組異常類,遇到時確保 不 回滾。 |
不回滾異常類名(noRollbackForClassname) | 一組 Class 類的名字,必須是Throwable 的子類 | 一組異常類,遇到時確保 不 回滾 |
咱們推薦你參考 @Transactional 註解的javadoc,其中詳細列舉了上述各項屬性及其可選值。it
————————————————————————————————————
經過以上可知,在spring 中運用@Transactional 註解,本身拋出異常UnsupportedOperationException會 回滾,拋Exception異常,得做相關的配置纔會回滾。