Spring入门学习(事务的传播)
事务的传播
- 默认的传播事务为
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); } }
当AA的余额有300,当前库存为1001有10本,1002有10本,执行后都可购买成功。// 测试事务的传播行为 @Test public void testTansactionPropagation() { cashier.checkout("AA", Arrays.asList("1001","1002")); }
- 当指定
propagation=Propagation.REQUIRES_NEW
时, 表示启用新事务,使用自己的事务运行,如果有事务在运行就应该先挂起它,再次执行后结果为:
第一本书购买成功,第二本书由于余额不足购买失败