声明式事务属性

声明式事务属性

timeout-int(秒为单位):超时,事务超出指定时间自动终止并回滚

@Transactional(timeout=3)
	public void checkout(String username,String isbn) throws InterruptedException{
		//减库存
		bookDao.updateStock(isbn);
		//线程休眠4秒
		Thread.sleep(4000);
		//查询书本价格
		Integer price = bookDao.getPrice(isbn);
		//减余额
		bookDao.updateBalance(username, price);
	}

readOnly-boolean:设置事务为只读事务,可以加快查询速度,不用管事务那一堆操作

@Transactional(readOnly=false)//如果为true则只能进行查询
	public void checkout(String username,String isbn) throws InterruptedException{
		//减库存
		bookDao.updateStock(isbn);
		//查询书本价格
		Integer price = bookDao.getPrice(isbn);
		//减余额
		bookDao.updateBalance(username, price);
	}

回滚控制属性

异常的分类:

  • 运行时异常(非检查异常):可以不用处理,默认回滚
  • 编译时异常(检查异常):默认不回滚

noRollbackFor-Class[]:哪些事务可以不回滚(可以让原来回滚的异常设置成不回滚)

 /*
	 * 异常的分类:
	 * 		运行时异常(非检查异常):可以不用处理,默认回滚
	 * 		编译时异常(检查异常):默认不回滚
	 * noRollbackFor-Class[]:哪些事务可以不回滚(可以让原来回滚的异常设置成不回滚)					 * noRollBackForClassName-String[](Stirng全类名):这个与上面方法一样,只不过参数是全类名
	 */
	
	//设置算数异常与空指针异常不回滚
	@Transactional(noRollbackFor={ArithmeticException.class,NullPointerException.class})
	public void checkout(String username,String isbn) throws InterruptedException{
		//减库存
		bookDao.updateStock(isbn);
		//查询书本价格
		Integer price = bookDao.getPrice(isbn);
		//减余额
		bookDao.updateBalance(username, price);
		//手动设置运行时异常
		int a = 10/0;
	}

运行时异常本身会回滚,但是设置以后将不会回滚,数据库数据将被改变。

roolbackFor-Class[]:哪些异常事务需要回滚(原本编译时异常不回滚,可以让它回滚)

/*
	 * roolbackFor-Class[]:哪些异常事务需要回滚(原本编译时异常不回滚,可以让它回滚)
	 * roolbackForClassName-String[]:跟上面作用一样,只不过参数是全类名
	 */
	//设置FileNotFoundException回滚
	@Transactional(rollbackFor={FileNotFoundException.class})
	public void checkout(String username,String isbn) throws InterruptedException, FileNotFoundException{
		//减库存
		bookDao.updateStock(isbn);
		//查询书本价格
		Integer price = bookDao.getPrice(isbn);
		//减余额
		bookDao.updateBalance(username, price);
		//设置编译时异常,这个文件是不存在的
		new FileInputStream("D:aaa.xxx");
	}

此时编译时异常默认是不回滚的,设置为回滚后,出现相关异常,将会回滚,数据库不会改变。

隔离级别

isolation:设置隔离级别,根据业务的特性来设置隔离级别

/**
	 * isolation:设置隔离级别,根据业务的特性来设置隔离级别
	 * @param isbn
	 * @return
	 */
	@Transactional(readOnly=true,isolation=Isolation.READ_UNCOMMITTED)
	public int getPrice(String isbn){
		return bookDao.getPrice(isbn);
	}
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值