1. 目前遇到的情况是多并发更新用户余额,由于多个线程取得原余额一样,导致多个线程的结果相互覆盖,如下图:

1.png

如图可以清晰的看出,10个线程执行十次,每次更新的结果都一样

2. 下面是使用了乐观锁之后的效果

2.png

3. 乐观锁的配置方法详细见官网,我这里就直接贴代码了,最重要的是数据库记得加上version字段!!!

MybatisPlusConfig.java

@Configuration
public class MybatisPlusConfig
{
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor()
    {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 乐观锁
        interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor());
        return interceptor;
    }

    /**
     * 乐观锁
     */
    public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() {
        return new OptimisticLockerInnerInterceptor();
    }
}

SysUser.java 实体类

package com.ruoyi.project.system.domain;

......
/**
 * 用户对象 sys_user
 * 
 * @author ruoyi
 */
public class SysUser extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    ......

    @Version
    private Long version;

    ......
}
最后编辑:2021年08月02日 ©著作权归作者所有

发表评论

正在加载 Emoji