Spring中事務的其他屬性(隔離級別、回滾、只讀、過期)

Spring中事務的其他屬性(隔離級別、回滾、只讀、過期)

一、說在前面

1、使用isolation來指定事務的隔離級別,最常用的取值爲READ_COMMITTED
2、默認情況下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);
	}


By luoyepiaoxue2014

微博地址: http://weibo.com/luoyepiaoxue2014  點擊打開鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章