00:00
接下来呢,我们就来创建一下我们上堂课提到的定时任务,那么定时任务呢,在之前微信支付的过程当中呢,我们已经引入过了,我们在payment application这个项目的启动类当中可以看到有一个enable schedule,这个呢就是引入了我们spring的定时任务,那么现在呢,我们直接可以使用这个定时任务,我们在task这个包下面创建一个阿里配task。好,那么我们先打开微信配task啊,那确保微信配里面的所有的定时任务呢,都是被我们屏蔽掉的。在这个位置我们写一个屏蔽的代码啊,这样的话避免呢,微信配task里面的定时任务呢,干扰到一会我们阿里配佩塔斯克里面定时任务的测试好,那么接下来呢,我们就来开发我们的阿里配的定时任务,首先呢,这个定时任务呢,它得作为一个组件自动的在我们应用程序当中的词spring容器当中创建出来,第二呢,我们在这个地方呢,要写一些日志啊,所以呢,我们写了component和slf forj这两个注解,那么。
01:17
我们来创建一个定时任务的方法,Public wide叫order confirm,那实际上这个方法呢,我们就参考我们的微信,配这个里面的order confirm就可以了,我们把它复制过来就行。啊,那肯定呢,是要做一些变化的,好,那么我们的。查询逻辑呢,是从第零秒开始,每隔30秒执行一次查询,创建超过五分钟并且未支付的订单,那我们在这个地方通过at schedule这样的一个注解,通过CN这个表达式,我们呢就每隔30秒执行一次查询啊,所以说这个课程表达式的意思呢,是每隔30秒执行一次查询,那接下来呢,我们在这个地方呢,就写order confirm被执行。
02:15
然后接下来呢,我们调用order in for service里面的get no pay order by这个方法,那么为了测试方便,这个里面的Du呢,我们设置的是一,也就是说查询超过一分钟并且未支付的订单,那么在实际的生产环境当中呢,我们再把它改成实际的值,比如说50分钟啊,有的时候是20分钟呀,啊,甚至是30分钟啊,啊,这样查询一段时间内未支付的订单,然后后续呢,我们会对这个订单呢进行处理,那么处理的过程一会我们再说哈,我先把它屏蔽掉,那么这个位置我们呢,很显然是需要引入一个order info service。这个对象的,所以呢,我们在这面通过resource来引入这个对象,Private how for service,好,我们现在呢,把订单的业务对象呢已经来了,那我们在这个地方呢,就可以调用我们之前曾经写过的get no pay order by啊这样的一个方法去返回一个订单里边,那么我们来看一下这个方法吧,这个方法首先它用时间日期函数呢,创建了一个时间对象,那么这个时间对象呢,就是和当前时间比啊,然后减去一定的时间,比如说我们传进来的是一分钟,那么就减去一分钟,那减去一分钟之后呢,算的就是在当前时间之前的一分钟,那么这个查询条件的意思呢,就是查询创建超过一分钟啊,并且呢是未支付no pay的订单,那这个超过一分钟这个地方大家注意用的是。
03:55
啊,小于等于好,那么这是我们的查询条件的一个组装,然后最终呢,会返回我们的数据列表。
04:08
好,接下来呢,我们重新启动一下应用程序,我们来看一看我们的未支付的订单是否能够被查询出来,那么我们先来看一下我们数据库当中的未支付订单的情况哈,我们打开order info这个表。那么我们找到所有的未支付订单,那这个里面呢,有。刷新一下有两个未支付订单啊,那一个是微信的未支付,一个是支付宝的未支付啊,所以呢,我们都来做一个查询。把应用程序呢,重新启动一下。那应用程序一启动呢,一旦这个定时任务在适当的时候呢,就会被执行啊,因为它是每隔30秒执行一次哈,所以我们注意观察一下这个控制台,看一看这个定时任务呢,有没有被成功的打印出来。
05:15
好,现在呢,我们的定时任务呢,已经执行了一次了,在这个位置order confirm被执行,那么我们查询出来的订单呢,是两个,那很显然它不太对,为什么?因为现在我们这个是阿里配的task啊,也就是支付宝的定时任务,我们呢希望只能查询出支付宝的未支付订单来,所以呢,我们需要在这个位置像之前一样哈,扩充一个什么呢?扩充一个字段,这个字段呢,就是我们的支付类型这个字段啊,那么我们在这个位置呢,再添加一个参数叫做he t点阿里pay.get t,那么同样。
06:02
我们在之前的这个微信配task的这个位置呢,也要添加相同的参数,所以呢是pay type,点微信配点get type,那么这两个方法呢,调用的都是get no pay order by duration这样的一个业务方法,所以呢,我们先进入到这个业务方法当中,把刚才我们的这个payment的参数给它,Payment的T啊给它追加上。然后接下来呢,我们再来到它的实现当中哈,我们找一下order for service mpll吧。好,我们找到这个get no pay order by这个方法,我们把这个参数加回来,那么参数加过来之后呢,很显然我们要利用这个参数呢做查询,也就是说我们当前查询的这个结果当中呢,需要只包含当前的这个支付类型哈,所以这款是payment type,这个是字段的名字,然后面呢,是我们传进来的参数的名字,这样的话呢,它就可以做一个范围更小的查询啊,只查询支付宝的支付订单,好,我们重新启动一下。
07:28
好,我们来看一下他有没有执行我们的定时任务。那正常情况下,如果这一次能够成功的执行我们的电视任务的话呢,他只会查询出一条记录,就是那个支付宝的订单很被执行,然后我们会发现这次呢,只查到了一条记录,那么这条记录呢,就是支付宝的订单。
我来说两句