注解是Spring框架里很常用的,本博文對Annotation的事務管理進行說明,目的是為編程學習者提供參考的博客。
@Transactional放在一個類前面時,只是對public類型的方法有用
若類中某些方法不需要事務管理時,通過@Transaction(propagation = Propagation.Not_SUPPORTED)注釋說明事務管理對這個方法不適應
~~~
@Transactional
public class TestServiceBean implements TestService {
private TestDao dao;
public void setDao(TestDao dao) {
this.dao = dao;
}
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public List<Object> getAll() {
return null;
}
}
~~~
**事物傳播行為介紹:**?
@Transactional(propagation=Propagation.REQUIRED)?
如果有事務, 那么加入事務, 沒有的話新建一個(默認情況下)
@Transactional(propagation=Propagation.NOT_SUPPORTED)?
容器不為這個方法開啟事務
@Transactional(propagation=Propagation.REQUIRES_NEW)?
不管是否存在事務,都創建一個新的事務,原來的掛起,新的執行完畢,繼續執行老的事務
@Transactional(propagation=Propagation.MANDATORY)?
必須在一個已有的事務中執行,否則拋出異常
@Transactional(propagation=Propagation.NEVER)?
必須在一個沒有的事務中執行,否則拋出異常(與Propagation.MANDATORY相反)
@Transactional(propagation=Propagation.SUPPORTS)?
如果其他bean調用這個方法,在其他bean中聲明事務,那就用事務.如果其他bean沒有聲明事務,那就不用事務.
事物超時設置:
@Transactional(timeout=30) //默認是30秒
**@Transactional注解中常用參數說明**
<table border="1" cellspacing="0" cellpadding="0" style="width:100%"><tbody><tr><td width="21%"><p><span style="font-size:14px">參 數 名 稱</span></p></td><td width="78%"><p><span style="font-size:14px">功 能 描 述</span></p></td></tr><tr><td width="21%"><p><span style="font-size:14px">readOnly</span></p></td><td width="78%" valign="top"><p><span style="font-size:14px">該屬性用于設置當前事務是否為只讀事務,設置為true表示只讀,false則表示可讀寫,默認值為false。例如:@Transactional(readOnly=true)</span></p></td></tr><tr><td width="21%"><p><span style="font-size:14px">rollbackFor</span></p></td><td width="78%" valign="top"><p><span style="font-size:14px">該屬性用于設置需要進行回滾的異常類數組,當方法中拋出指定異常數組中的異常時,則進行事務回滾。例如:</span></p><p><span style="font-size:14px">指定單一異常類:@Transactional(rollbackFor=RuntimeException.class)</span></p><p><span style="font-size:14px">指定多個異常類:@Transactional(rollbackFor={RuntimeException.class, Exception.class})</span></p></td></tr></tbody></table>
?續表)
<table border="1" cellspacing="0" cellpadding="0" style="width:100%"><tbody><tr><td width="21%"><p><span style="font-size:14px">參 數 名 稱</span></p></td><td width="78%"><p><span style="font-size:14px">功 能 描 述</span></p></td></tr><tr><td width="21%"><p><span style="font-size:14px">rollbackForClassName</span></p></td><td width="78%" valign="top"><p><span style="font-size:14px">該屬性用于設置需要進行回滾的異常類名稱數組,當方法中拋出指定異常名稱數組中的異常時,則進行事務回滾。例如:</span></p><p><span style="font-size:14px">指定單一異常類名稱:@Transactional(rollbackForClassName="RuntimeException")</span></p><p><span style="font-size:14px">指定多個異常類名稱:@Transactional(rollbackForClassName={"RuntimeException","Exception"})</span></p></td></tr><tr><td width="21%"><p><span style="font-size:14px">noRollbackFor</span></p></td><td width="78%" valign="top"><p><span style="font-size:14px">該屬性用于設置不需要進行回滾的異常類數組,當方法中拋出指定異常數組中的異常時,不進行事務回滾。例如:</span></p><p><span style="font-size:14px">指定單一異常類:@Transactional(noRollbackFor=RuntimeException.class)</span></p><p><span style="font-size:14px">指定多個異常類:@Transactional(noRollbackFor={RuntimeException.class, Exception.class})</span></p></td></tr><tr><td width="21%"><p><span style="font-size:14px">noRollbackForClassName</span></p></td><td width="78%" valign="top"><p><span style="font-size:14px">該屬性用于設置不需要進行回滾的異常類名稱數組,當方法中拋出指定異常名稱數組中的異常時,不進行事務回滾。例如:</span></p><p><span style="font-size:14px">指定單一異常類名稱:@Transactional(noRollbackForClassName="RuntimeException")</span></p><p><span style="font-size:14px">指定多個異常類名稱:</span></p><p><span style="font-size:14px">@Transactional(noRollbackForClassName={"RuntimeException","Exception"})</span></p></td></tr><tr><td width="21%"><p><span style="font-size:14px">propagation</span></p></td><td width="78%" valign="top"><p><span style="font-size:14px">該屬性用于設置事務的傳播行為,具體取值可參考表6-7。</span></p><p><span style="font-size:14px">例如:@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)</span></p></td></tr><tr><td width="21%"><p><span style="font-size:14px">isolation</span></p></td><td width="78%" valign="top"><p><span style="font-size:14px">該屬性用于設置底層數據庫的事務隔離級別,事務隔離級別用于處理多事務并發的情況,通常使用數據庫的默認隔離級別即可,基本不需要進行設置</span></p></td></tr><tr><td width="21%"><p><span style="font-size:14px">timeout</span></p></td><td width="78%" valign="top"><p><span style="font-size:14px">該屬性用于設置事務的超時秒數,默認值為-1表示永不超時</span></p></td></tr></tbody></table>