SpringBoot集成JPA的乐观锁插件(5)

1.概述

        首先我们讲述一下啥是乐观锁。乐观锁呢是在并发操作时,用来保证数据库的数据安全来设立的一种机制。举个例子,账户里面原本有1000元,张三要往里面存300元,李四要往里面存400元,按理说操作结束后,账户里应该有1700元。但是如果不用乐观锁,会出现下面这种情况:张三和李四同事对数据进行查询,他们都会显示是1000元,然后各自进行操作,这时候如果李四的操作慢一点呢,张三先把数据改成1300,然后李四又把1400放进数据库,张三的数据就会被覆盖掉。
        这个时候引进了乐观锁的机制,他在数据库的表中设立了一个version字段,当张三和李四取数据的时候,随便把version取出来,两个人同时取到数据1000,version是1。当张三把数据修改完填回去,顺便会把version加1,此时就是2。李四修改完后发现,version和自己取数据时候的1不一样, 他就知道有人修改了数据。这就是基本原理,实现如下:

2.快速入门

1.导依赖(不需要导入依赖),但是需要提前导入jpa的依赖

2.实体类

3.Dao层

import com.guguo.Entity.Traveler;
import org.springframework.data.jpa.repository.JpaRepository;

public interface TravelerDao extends JpaRepository<Traveler,Integer> {
}

4.Controller层

乐观锁比较的两个版本是在进行save操作时候的,数据库中version的版本和save方法中对象的version版本是不是一致

    //修改数据
    @GetMapping("/updateTraveler")
    public void updateTraveler() throws InterruptedException {
        Traveler traveler = travelerDao.findById(4).get();
        traveler.setGmtModified(new Date());
        //如果在这10秒内,你对数据库没有任何操作,那么下面的那条save语句就能执行成功。
        // 但是如果在这10秒内,修改了数据库的version字段,那么下面的save方法就会报错
        Thread.sleep(10000);
        travelerDao.save(traveler);
    }

 就报的这个错。。。

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值