事务@Transactional未提交,锁已经释放的问题

最近在接口测试中遇到的问题

在下单流程中,锁了扣减库存部分,在并发测试下会出现销量大于库存的情况。
解决办法:目前业务情况不需要加锁在下单流程中,使用mysql乐观锁就足够了,乐观锁会出现失败请求,悲观锁加上后会影响并发,目前业务不多会浪费资源。
使用mysql行锁就够了,如果代码内加锁,可以减缓mysql负担,目前没必要。
spring事务提交在整个@Transactional执行完后,由于调用链较长,mysql连接数在高并发情况下可能会被耗尽,可考虑引入队列,
对于非必须业务或者耗时业务异步处理。
另外@Transactional是基于代理模式的,spring中默认的隔离级别是取的数据库的默认级别,mysql默认级别式可重复读。

评论

:D 一言句子获取中...