Spring中事務的其他屬性(隔離級別、回滾、只讀、過期)
一、說在前面
1、使用isolation來指定事務的隔離級別,最常用的取值爲READ_COMMITTED2、默認情況下Spring的聲明式事務對所有的運行時異常進行回滾,也可以通過對應的屬性進行設置,通常情況下取默認值即可。
3、使用readOnly來指定事務是否爲只讀,它表示這個事務只讀取數據不更新數據,這樣可以幫助數據庫引擎優化事務。
4、若真的是一個只讀取數據庫值的方法,應設置readOnly=true
4、使用timeout來指定強制回滾之前,事務可以佔用的時間。默認是30秒。
二、具體代碼如下:
本文的基礎代碼都是和Spring中聲明式事務管理一文中的一樣,在此不再贅述。1、測試代碼
//添加事務註解
/**
* 1、使用propagation指定事務的傳播行爲,即當前的事務方法被另外一個事務方法調用時如何使用事務,
* 默認的取值爲REQUIRED,即使用被調用方法的事務
* REQUIRES_NEW:使用自己的事務,調用的事務方法的事務被掛起。
* 2、使用isolation來指定事務的隔離級別,最常用的取值爲READ_COMMITTED
* 3、默認情況下Spring的聲明式事務對所有的運行時異常進行回滾,也可以通過對應的屬性進行設置,通常情況下取默認值即可。
* 4、使用readOnly來指定事務是否爲只讀,它表示這個事務只讀取數據不更新數據,這樣可以幫助數據庫引擎優化事務。
* 若真的是一個只讀取數據庫值的方法,應設置readOnly=true
* 5、使用timeout來指定強制回滾之前,事務可以佔用的時間。默認是30秒
*/
/* @Transactional(propagation=Propagation.REQUIRED,
isolation=Isolation.READ_COMMITTED,
noRollbackFor={UserAccountException.class})*/
@Transactional(propagation=Propagation.REQUIRED,
isolation=Isolation.READ_COMMITTED,
readOnly=false,
timeout=3)
public void purchase(String username, String isbn) {
try {
Thread.sleep(4000);//這裏是毫秒,上面timeout是秒
} catch (InterruptedException e) {
e.printStackTrace();
}
//1、獲取書的單價
int price = bookShopDao.findBookPriceByIsbn(isbn);
//2、更新書的庫存
bookShopDao.updateBookStock(isbn);
//3、更新用戶餘額
bookShopDao.updateUserAccount(username, price);
}
微博地址: http://weibo.com/luoyepiaoxue2014 點擊打開鏈接