spring事务隔离SERIALIZABLE---数据库锁

扣减余额时不会出现负数,记录一下:

在service层添加注释:如下

@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.SERIALIZABLE)

事务传播:propagation=Propagation.REQUIRED  //支持当前事务,如果当前没有事务,就新建一个事务

事务隔离级别:isolation=Isolation.SERIALIZABLE  //除了防止脏读,不可重复读外,还避免了幻像读。

实例:

@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.SERIALIZABLE)
public int getRepuser0(int userid) throws Exception {
int re = 0;
Repuserinfo  rp= reDao.getRepuser(userid);
int sa  = rp.getBalance() ;
System.out.println("==当前余额前=="+sa);
if(sa > 0){
re = reDao.updateBalance(userid, 5);
Repuserinfo  rp1= reDao.getRepuser(userid);
System.out.println("==当前余额后=="+rp1.getBalance());
}else{
System.out.println("==当前余额over=="+sa);
}
return re;
}

但是会抛出现死锁异常,需在Controller层加@Scope("prototype")注解。但是大量并发还是会出现死锁异常,同时2000次访问

你可能感兴趣的:(spring事务隔离SERIALIZABLE---数据库锁)