背景 商品秒杀
- 条件: 限定用户在活动期间只能参加一次, 不能超卖
- 环境: springBoot
处理方法
service方法上加了事务和锁
加锁是因为,并发下多个线程同时进行操作有可能导致超卖
service
public void doKill(){
if(! condition) {
return;
}
try{
Lock.lock(); // 这个锁可能是个全局的锁
if(! condition) {
return;
}
doSomeThing(); // thows BusinessException
}finally {
Lock.unock();
}
}
@Transectional
public void doSomeThing(){
}
注意:
假如在事务的service调用另外一个事务方法, 那么事务是不会生效的
可以在serviceImpl 里面再注入自己
注意假如doKill方法上加事务,可能会出现问题, 因为锁释放了事务还没提交
所以一定要保证事务结束后才释放锁

本文探讨了在SpringBoot环境中,如何通过事务和全局锁来确保商品秒杀活动的条件约束,即用户只能参加一次且不发生超卖。在service方法上添加事务和锁,使用Lock.lock()和Lock.unlock()确保在事务提交后释放锁,防止并发问题。同时指出,如果在事务中调用另一个事务方法,外层事务可能不会生效,需注意事务的嵌套使用。
2135

被折叠的 条评论
为什么被折叠?



