1. 程式人生 > >(19)Spring學習記錄---Spring_bean(隔離級別&回滾&只讀&過期)

(19)Spring學習記錄---Spring_bean(隔離級別&回滾&只讀&過期)

隔離級別

使用isolation定義隔離級別,常用取值是READ_COMMITTED

回滾

@Service("bookService")
public class BookServiceImpl implements BookService {

	@Autowired
	private BookShopDAO bookShopdDAO;	
	
	//新增事物註解
	//預設情況下使用spring的宣告事物對所有執行時異常進行回滾,也可以指定某特定的異常回滾,而對非特定不回滾
	//noRollbackFor 對某型別不進行回滾
	//RollbackFor 只對某型別回滾
	@Transactional(
			noRollbackFor= {UserAcoountException.class})
	@Override
	public void purchase(String username, String isbn) {
		//獲取書單價
		int price = bookShopdDAO.findbookPriceByIsbn(isbn);
		
		//更新庫存
		bookShopdDAO.updateBookNum(isbn);
		
		//使用者餘額減
		bookShopdDAO.updateUserAccount(username, price);
	}

}

我這裡設設定對 UserAcoountException.class不進行回滾

執行前

執行後

結果:庫存減1,但是餘額沒有變化

解釋:因為我沒有對餘額進行回滾,庫存更新是在餘額更新之前

只讀

readOnly 指定事物是否只讀 表示這個事物只讀資料不更新資料 幫助資料庫引擎優化事物 若某資料只需要訪問 不需要修改 設定isolation=Isolation.READ_COMMITTED

 過期

通過timeout設定過期時間,若方法沒有在規定時間內執行完,丟擲異常