1. 程式人生 > >Spring入門學習(事務的傳播) 第二十節

Spring入門學習(事務的傳播) 第二十節

Spring入門學習(事務的傳播)

事務的傳播

  1. 預設的傳播事務為propagation=Propagation.REQUIRED,指定事務的傳播行為,即當前的事務方法被另外一個事務方法呼叫時如何使用事務。
    @Service("bookShopService")
    public class BookShopServiceImpl implements BookShopService {
    
    	@Autowired
    	private BookShopDao bookShopDao;
    	
    	@Transactional(propagation=
    Propagation.REQUIRED) @Override public void purchase(String username, String isbn) { // 1.獲取書的單價 int price = bookShopDao.findBookPriceByIsbn(isbn); // 2.更新書的庫存 bookShopDao.updateBookStock(isbn); // 3.更新使用者餘額 bookShopDao.updateUserAccount(username, price); } }
    測試程式碼:
    // 測試事務的傳播行為
    @Test
    public void testTansactionPropagation() { cashier.checkout("AA", Arrays.asList("1001","1002")); }
    當AA的餘額有300,當前庫存為1001有10本,1002有10本,執行後都可購買成功。
    在這裡插入圖片描述在這裡插入圖片描述
  2. 當指定propagation=Propagation.REQUIRES_NEW時, 表示啟用新事務,使用自己的事務執行,如果有事務在執行就應該先掛起它,再次執行後結果為:
    第一本書購買成功,第二本書由於餘額不足購買失敗
    在這裡插入圖片描述
    在這裡插入圖片描述在這裡插入圖片描述