00:00
那首先呢,我们来看一下上堂课呢,我们已经分析了乐观所的一个背景,还有呢,乐观所是如何呃解决我们这个并发冲突问题的,那么这堂课呢,我们来看一下买贝斯plus当中如何使用乐观锁插件来帮助我们方便的去完成这样的一个乐观所修改的这么一个功能,那接下来呢,我们就来看一看具体的流程,首先这里面呢有三个步骤哈,第一个步骤呢,就是修改实体类,在实体类当中的相对应的version这个字段上呢,添加一个version注解啊,这样的话呢,我们就告诉my be plus了,我这个version字段就是版本号,那么你可以自动的对我的这个版本号字段在必要的时候做相对应的操作。第二个呢,就是添加乐观锁插件,那我们在之前我们的一个my business plus的配置文件当中,将乐观锁插件的配置添到这个。
01:01
呃,Intercept的这个列表里面就可以了,然后第三个步骤呢,我们就可以执行测试了,好,所以接下来呢,我们来看一看这三个步骤具体。的一个。这个代码的编写,我们找到product Java,然后在这个version这个。上面呢,添加这样的一个注解,叫做version注解。接下来呢,就是第二个步骤,我们找到configig里面的my be啊,Plus config,那在这个ban这样的一个配置当中呢,我们在interceptor当中已经添加了一个分页插件了,好,接下来呢,我们添加一个乐观锁插件。那么乐观锁插件呢,就像我们看到的,它叫optimistic locker inner intercept,这个东西不用背啊,大家就是你通过在我们的官方文档当中,实际上呢,是能够找到这个东西的,是不是直接复制过去就可以了,好然后接下来呢,我们把它复制过来。
02:07
好,那这样的话呢,我们的这个插件呢,就非常方便的插入到我们的应用程序当中了,接下来呢,我们来看一下我们刚才的这个例子。Intercept tests。好,还是这样的一个例子啊,那我们呢,在这个地方。先把我们数据库当中的数据记录的这个值呢,给它还原回去,比如说这面呢是。嗯,啊,100是不是啊100啊。100好,然后接下来呢,版本号这块就是二吧啊啊版本号不用改啊,我们就把这price改回去就可以了,接下来呢,我们在这个地方直接执行。大家看一下整个的一个执行的流程啊,他的执行的流程呢,是这样的,首先第一个步骤呢,是小李修改好,所以小李呢,先把呃数据库从呃把这个数据从数据库中取出来。
03:12
然后小王把数据从数据库中取出来。然后小李修改的结果,也就是说小李进行了一个成功的修改,接下来呢,小王修改好,由于乐观所存在,小王修改的时候呢,数据的版本号已经发生了变化,所以他的修改呢并不成功,是不是好,最后老板看到的价格呢,是150块钱,也就是说在我们乐观所应用的这样的一个前提下呢,小王的修改和小李的修改发生了冲突,所以呢,乐观所生效了,那么小王在修改的时候呢,因为版本号不对,所以他的修改呢,注定是有问题的,那么我们的系统呢,也拒绝了他的修改,所以呢,他的这个update by ID呢就不成功了,那么老板看到的价格呢,虽然不是最终他需要的价格,但是至少老板没有赔钱,是不是啊,应该卖120块钱,他没有70块钱卖啊,那最终呢,是第一个版本150块钱卖的,那么实际上在这个过程当中呢,我们也可以对这个程序进行一个优化,什么优化呢?就是小王一旦修改失败了,他可以。
04:16
去重试对吧,这就是我们所说的重试机制嘛,所以呢,我们可以来判断一下,就是如果。RESULT2等于零的话,就说明小王修改失败,那么这块呢,我们会失败重试。好,失败重试的过程,实际上呢,就是重新获取数据,重新修改数据啊,点select by ID,然后还是一啊,然后呢,我们给他呃,获取一个记录,那这个记录呢,小王啊,比如说我们还给他复制到PR里面吧。然后接下来呢,P2。点set price,然后P2,点get price,然后减去30,好,小王呢,对这个数据进行重新的修改,然后接下来呢,是product map DR update by ID p。
05:17
这样的话呢,我们的这个修改呢,就进行了一个重试,然后接下来呢,小王重试的结果。好,那这块呢,就是我们整个的这样的一个修改了,然后呢,我再把这个RESULT2。你还复制过来就可以了,对不对。好,那接下来呢,我们再重新的对这个代码呢,进行一个测试。好,我再把这个一百五呢,再改成100啊,同时呢,经过刚才我们的一轮修改呢,呃,二已经变成三了,因为小李的修改是生效了,所以这个商品的版本号呢,已经又进行了一个变化,那接下来呢,我们再来进行一个测试。
06:16
好,那我们来看一下结果啊。老板看到的价格是对的,那我们来看前面。前面的话呢,那就是首先小李修改的结果是一,然后呢,小王修改的结果是零,接下来小王修改失败,小王发起重试,小王发起重试的过程呢,他又获取数据,然后呢进行修改,小王重试的一个结果是一,这样的话呢,整个的修改就成功了,最后老板看到的价格是120块钱,那这样的话呢,我们通过乐观锁解决了我们的问题,并且刚才的version呢由三变成了五,也就是说两个人的修改其实都成功了。啊,所以呢,这块呢,就是我们整个乐观锁的一个啊,在买be plus当中的一个实现流程,那么大家可能会发现呢,我们刚才所分析的这样的一个version的字段的一个参与呢,呃,其实在我们的my business plus当中,我们只需要做一个version字段,并且给他做一个version注解就可以了,然后呢,我们在这个地方呢,给它添加一个这个乐观锁插件,那么在具体的去执行这个应用程序的,呃,这样的一个业务操作的时候呢,我们不用关心version字段,所以呢,在整个的这样的一个测试用例当中,我们没有任何version的痕迹,所以呢,我们可以把精力着重于我们的业务,而不是version。
07:37
啊,Version呢,在后台已经帮助我们自动的处理了啊,所以呢,这就是完整的这样的一个乐观锁的一个解决方案。
我来说两句