00:00
讲这么一个知识点。看到我的课件中的第一个课件,咱拉到最下边。下面给大家讲的是这个东西。叫什么定时任务?我先解释一下什么叫定时任务,举这么几个例子啊。定时任务呢,说的官方点就是你可以在特定时间让你的程序自动去执行,这个叫定时任务,然后这定时任务这种例子在咱们现实生活中位应该都见到,比如一个典型例子,这个例子叫闹钟,各位在每天起床应该都用闹钟,比如闹钟呢,它在每天一个固定时间是不是都会去响啊,这相遇就是一个叫定时任务,比如每天早晨我设置在早晨六点闹钟去响,那每天早晨六点闹钟是会自动响起,这个就叫定时任务啊,是一个典型场景,而我们现在程序中也可以用到定时任务,那在程序中定时任务有什么场景,给大家做个介绍,咱就以我们这个为例。
01:04
各位注意啊,我现在呢,如果说我要去生成数据,那咱是不是要手动去选择日期点生成是不是才可以做到,就是我们需要手动操作,这么操作确实没有问题,但是我们实际中这种功能一般我们不需要用手操作,我现在想程序自动完成,比如说我现在一个规则,我想在每天就是。凌晨的一点去把前一天这个数据自动执行统计到我们这个统计分析表中来,我想让这过程自动实现,而不需要我都每次手动去执行,这个就是定时任务的场景,比如说这个功能,其实咱们可以没有,我们用这个。定时任务方式,不写页面,让他每天都自动执行,这个就是它一个场景,比如说刚才这过程通过程序完全都是自动化去完成,自动化调接口,自动化加到我们这个表里面去啊,这个啊就是它一个场景,这叫定时任务,各位想那个闹钟就是一个典型的一个用时件应用场景啊,那定时战务怎么做,给大家说明啊。
02:12
因为咱们现在用的是一个叫boot工程,比如说任,所以它在整合定时任务,应该说是特别方便的,那我来说一下怎么来做啊,就是定时任务咱该怎么去使用。给各位来啊,画到图上啊。写到这里边,首先定时任务也可以理解为就是在一个固定时间去自动执行,我们的程序不需要手动再去操作,它能自动执行,比如说我们现实生活中那个闹钟。啊,闹钟就是一个典型的这么一个定时任务场景,每天固定时间会响起,而现在我们也可以让程序在每天固定时间去操作,比如我们刚才这生成数据的功能,比如我们让他在每天凌晨一点把前一天的数据做个统计,这个就叫定时任务啊,它一个场景,那定时任务呢,在我们这里边该怎么做?因为咱们现在用的是死人boot这个工程,用boot可以自动或者更方便的整合定时任务啊,那我说一下它的实现步骤。
03:17
咱一步来说啊,首先第一步操作,你要在我们的此轮步骤工程中用到定时任务,第一步怎么做呢?你需要在你这个项目的启动类上边添加上一个注解,这是它的第一步,那我们现在来加一下啊,咱就来到这个sta这个模块,我们找到启动类这个在上边,咱给它加上一个注解,这注解我加一下啊,跟上面形式类似,它叫an able这个东西。Schedule啊,这是加一个注解,当我们加上这个注解之后,就表示你开启了定时任务这个操作啊,这是它的第一步,加上这个叫unable schedule表示开启你的就是任务,这是它的第一步。
04:04
啊,这个各位知道啊。然后这一步做到之后,我们再看他的第二步怎么来做。给大家写一下啊,第二步操作呢,咱就需要啊,创建一个定时任务的那么一个类,就是指定你什么时候执行,建一个类,然后接完类之后在这个类里边啊,这个类里边咱需要使用一个东西,这东西是什么呢?是一种表达式。来设置,你什么时候去执行啊,就是写一个表达式,而这表达式呢,在里边有一种说法,它叫什么表达式呢?写一下啊,它叫D表达式。叫CN表达式,这个表达式就用于设置你这个什么时候执行,或者一个执行的一个规则。啊,设置执行的规则,所以咱们第二步就是建一个定时任务的类,在类里边呢,用客程表达式来制定你的执行规则,啊,这就是他的第二步,所以咱们做法就是么来做啊,没有什么特别的,那我们来写一下啊,包表达式怎么做,咱马上讲到。
05:10
第一步注解加上了,然后第二步在里边咱就可以创建这么一个类,那比如我现在啊,我就建一个类,类的名字随便写啊,这没有什么特别要求,那我在里边我就创建一个啊,比如类,我给它加个包,叫这个schedule。啊,这是我们写的一个包啊,我就写到这个位置啊。这个包叫筛掉。然后在这个包里边呢,咱们给它就创建一个类类的名字随便起,没有什么特别要求啊,那比如说我用课件中起成一样的啊,叫这个shadow。这个啊,咱创建一个类,然后创建类之后,在类上边呢,咱加个注解,就咱之前一直用的comment,让这个类交给使管理,然后创建之后在那里边我们来创建方法,并且用到我们那个叫课程表达式啊,那比如说我们先写一个简单方法。
06:03
我来一个叫public的,比如我叫这个TASK1啊,咱做一个测试。这一个方法在里边,为了咱一会儿看的明显,比如把它我就做个输出啊,就写这么一段话啊。就要这个task。一。执行了啊,就是这段话,然后这方法写完之后,咱需要在方法上边加注解,加上那个叫可表达式,那怎么加,我先把这段话复制过来,一会我会解释这到底什么意思啊,我先复制啊,因为是固定写法。它的做法就是在方法上边咱加一个注解,叫这个筛表,里边加一个叫C文,这就是你的current表达式,通过这个表达式就能制定他在什么时候执行啊,这是它的一个写法,所以这么做就完成了。当咱们一起用程序,它就按照这个表达式的规则去执行你的方法,包括这方法中,比如咱们可以调一些什么接口啊,比如你看我这里边,我在方法中可以调接口。
07:04
跟它是一样的啊,咱先以它为例给大家做个演示,而我这个本来是什么意思呢?它就表示你每隔五秒钟去执行一次这个方法,我加个注释啊。就是这个部分。它是一个叫课程表达式,它就表示咱们是每隔五秒钟。啊,五秒去执行一次我们的这个方法,所以这个我们就完成了啊,他就是这么来做,那咱们下面啊,把这个先试一下啊,先看目前的结果,课件中跟我写的一样啊,咱看目前什么效果,然后我们再进一步解释这可表达式到底什么含义,包括他该怎么去写啊,结构你记住是固定的,我再重复一遍啊,然后咱们测试。它的过程就是第一步在启动类上边加个注解,这个注解叫I schedule,表示你开启这个定时任务,然后第二步咱创建一个定时任务的类,类名随便起,里面加个注解,交易使用管理,然后在这里边我们写方法,方法上边加上一个课程表达式,表达式来设置你这个方法再生执行。比如说我这表达式的意思就是表示每隔五秒。
08:18
去执行E这个方法就是每隔五秒这句话会做输出啊,所以这里边当你启动这个规则就会生效,因为咱们把它交给sir瑞进行管理啊,那咱们把这个来试一下啊,看一下结果。我这是sta模块,我现在就把sta这个模块,我们给它做个启动啊。咱们看一下它的效果是什么样的。还等着先启动啊。然后这里边如果说效果正确,当你一启动这个规则就会生效,每隔五秒就会执行一次这个方法。那我们来试一下啊,看它一个结构,各位注意看啊,我应该打一个时间就好,但是这也能看到,你看目前只用了一次,只有两次,然后再再等五秒再来看。
09:06
大家看是不是又进行一次,再等五秒,它又会进行一次,就是每隔五秒这方法都会执行,你看是不是在里边不同的执行,因为我们规则是有规则啊,这就叫什表示,而这个规则就大家可以把这个间隔事长一点,比如说每天凌晨一点,或者说每天12点让他执行这规则都可以做到。这个啊,是咱们写的这么一个基本结构啊。大家把这个给到知道啊,我把这类给大家截过来,然后咱下面具体说一下这个表达式该怎么去写。这个啊,先复制啊,你知道这个过程啊,就这么来创建定时任务啊就可以做到。然后咱们下面说一下这个表达式怎么做,你注意啊,这结构固定的,主要是表达式不一样,那表达式怎么写,给大家做说明啊,关于这个叫cur表达式,我写到这位置啊。
10:02
可肉表达式它是用于就是设置你那个执行的规则,就你什么时候执行,在表达式中执行,而程表达式呢,它还有一种说法,它也称为什么呢,也称为这个东西啊,叫做妻子表达式。别理解错了,不是那个妻子啊,这个妻子1234567的七叫妻子表达式,或者说有的书里边也叫它叫期域表达式啊,都是一个意思啊,就不同书它不同叫法,也叫期域表达式。这个啊是关于它的说明,那这个具体什么意思,咱们来看个地方啊,我这里强调这表达式啊,不需要各位去写,因为在我们这个网络上有很多针对这种表达式的生成的工具,而我们在现实中也都是用工具去生成,很少有人去写这个东西,那咱们看这工具啊,我在课件中呢,给大家提供这个工具啊,当然你百度搜有很多这个工具,有搜这个词在线生成课程表达式有很多工具,我这里边提供了一个啊,咱们来看一下啊。
11:11
就是。这个啊,把它打开这个工具,或者说我这里边还有工具啊,这两个都差不多,你百度去搜,因为有的工具有时候可能不好使,你再换一个,我现在用它啊这个工具。就是这是一个在线生成工具,那个地址啊,咱用它,或者说还有其他的啊,这个网上去搜有很多,比如现在以它为例,大家看啊,刚才我说的这一表达式,又叫做妻子表达式,或者说叫期域表达式,什么叫区域呢?各位看上面的这部分。这清楚告诉我们它是什么年月日。啊,就是年周月日小时分秒,这个是不是正好是七个,所以这就叫七子或者七月,就是它有七个组成部分,包括你看啊这里边。
12:00
1234567,它拥有不同的组成部分,而每个部分对应这个年月年、周、月、日、小时、分秒啊,是这么来组成的,所以这个叫七子,或者说叫期域表达式。这个要明确啊,对应它里边的不同部分,年周月日小时分秒。这个给大家截过来啊,然后咱们具体来看一下啊,首先看第一个叫年,这年呢,咱一般是不指定的,因为默认就是当前这一年,一般咱从这个指令,但指令也可以啊,那我们看第二个,第一个年好理解是当前这个,比如说今年是2020年或者下年。第二个叫周,对,当月是第几周,比如说我们这个月第一周啊,第二周等等啊,但是他这周啊,其实指的不是你的第几周,你看是什么。1234567就是你的。比如说我今天是星期一,星期二,星期三,它指的是星期,就是它叫周,这要理解啊,就是周一,周二周三,周四周五周六周日嘛,它是1234567,然后第三个是月,就是你看这里边一到12月,你到月份,第四个是日,一到31号,只是有的月可能到28号,29号,30号,但是它只有一个31的这么一个范围啊,这个叫日,还有这个叫小时,小时从零到23啊,这是小事,时间包括你看啊有上午有下午。
13:25
上午是零到11,下午是12~23,这是小时,还有分钟零到59啊,还有这个秒零到59秒,这是它的七个组成部分,称为叫妻子或者说区表达式。这各位知道啊,比如说咱看一下这个表达式该怎么写,咱就以我们刚才这个为例,然后我再举几个更常见例子。大家看啊,我刚才立的是什么,每隔五秒是不是行一次啊,就是我们这个效果,你看啊,每五秒这程序九进行一次啊,每五秒进行一次,那怎么做,看到表达式的写法,你看啊这么一个写法,那咱们到这里边用这个来改一下,怎么改,注意啊,咱们看啊后面都不需要改,咱就改第一个,因为咱是每隔五秒,那怎么每隔五秒你看啊,第一个叫每秒。
14:16
这都是信号,那我们写这个。所以你看啊,比如这位置我写个五,它表示什么意思,就从你的零秒到五秒,每五秒定义词,这就叫每隔五秒执行,包括我写完之后,大家看下边这表达式给咱们是不是就生成出来了,生成的就这种形式啊,这个就完成了这么一个生成,这就叫课时表达式。所以大家把这知道啊,这是我们写,包括你看跟我写这个基本上一致的。就是这么一种结构啊,但是这里边有一个特点啊,大家仔细来看啊,我这么生成表达式,它的位数12345,是不是有六位啊,所以这里边我要强调啊,其实你的表达式中可以写上第七位,比如说再来一位加个位号,可以这么写是可以,但是我们在用这个就是spring boot整合这个定时任务的时候,它这里边只能写六位,如果你写七位,它会报错,里边只支持六位,为什么支持六位呢?它默认让你的这个年就是当前这个年,所以咱们默默认支持持六位。
15:24
这个我给到注意啊,比如现在我这里边写个五,这里边就是六位,第七位可以不写,比如你写上表达式是对的,但是咱整合的时候,比如你加个这个位置,比如我加个星号测成第七位,那这个它会有问题。这各位注意啊,里边值是六位,那比如我现在啊,我再写个规则。这个什么规则呢?比如现在我写这么一个逻辑啊,我想让他在每天凌晨的一点去定一次。包括你看啊,每次洗完之后呢,里边是不是有你执行的过程,你看这个执行的运行时间。
16:00
15秒,20秒,25秒,他是不是就是每五秒执行,然后现在我这么做,想在每天凌晨的一点执行,那家看怎么改啊,首先你把它先还原到初始状态,都是第一个,这都是初始状态,然后咱是每天一点,那我们找这个小时,在小时里边怎么叫一点。来看这个是不是叫指定时间,假如我指定每天凌晨一点,就这种程序,你看这个位置啊。3月15号一点,16号一点,17号一点,18号一点是不是这种程序,所以这个就是我们写的表达式,用这个在线生成工具,把这可以做到,包括其他的都一样,但是它的特点就是咱在整合的时候里边只能写到第六位,比如说你最后这位不写啊,问号表示就是任意啊,咱写到这个位置写成六位,写七位,它会有问题。所以用它可以生成咱的表达式啊,大家把这个给他知道啊。包括我把这个我刚才说的例子也说一下啊,我们现在要写的例子就是这个例子,它就是。
17:06
这个位置啊,我们在每天凌晨的一点去执行。啊,凌晨一点去执行,那怎么做呢?咱改的话就是改这个小时位置改成这个就是。一啊,就指定你这个时间,然后它最终生成这个表达式,就是咱们看到的。这表示就是它下面有它的执行的这么一个,就是最后运行时间啊,就是每天凌晨一点去执行,所以咱们用工具把这可生成,如果说在实际的开发中,那我们表达式咱也一般不需要去写,咱用工具把你要的效果给它,最终都生出来。啊,所以这个啊,我们就做个说明,关于这个表达式,最后啊,我再重复一遍啊,可任表达式又称为叫妻子,或者说叫区域表达式,它就是年月日、小时分秒这个结构,在这里边我们可以用工具生成工具,在网上有很多,我这里边提供这个工具,但是这个工具可能以后不好使,你可以百度去搜,里边有大量这种工具啊,应该都可以做到。
18:13
然后生成中,咱就通过表达式这个工具改成效果,比如第一个每五秒,那我们找它,包括固定时间,我们找这个指定,最终在这个位置能生成你这种那种,所以你看我这么写,就是每天凌晨一点,然后每个每天都是每隔五秒去执行啊,就是类似于这种形式,用它都可以做到。而这里边还有一个细节,在咱用boot整合的时候,我们这里边写的只能是六位,不能写七位,要写七位会报错,它默认把那年就是用当前这个年,所这个啊,我们就做这个说明,关于这个定时任务,咱们用课程表达式把这做到,所以各位把这个结构记住,就你加注解加表达式就能实现,然后表达式通过工具咱们就能生出来,我刚才举的例子啊,各位把这工具你都给它。
19:04
弄一弄啊,自己操作一遍这个啊,我们就测出来了啊。然后测试之后呢,比如现在我想在里边呢,去用我们的程序,那很简单了,比如我们现在去做那个就是。每天啊,比如说就在那个每天统计他的日期,统计它那个数据,那咱把那个three就是可以注进来,就注意一下哈,Private,我叫这个statics daily serviceta service。然后这个选完之后,下面咱们可以再写个方法,比如说再写个方法,这方法就做我们刚才说那个规则,就是在每天凌晨的一点。啊,凌晨的一点去执行我们这个方法,然后把那个数据查询进行这么一个添加,咱做这个啊,那这个方名字改一个,比如我叫TASK2,这名字随便起,然后在这里边加上咱刚才写那个表达式啊,就是按照它执行,然后给它还原重新写一下啊表达式。
20:09
这个线都还原回来啊。就这些,然后小时咱就指定一点,那咱在里边就写上这么一个表式。呃,这应该是这个。每天凌晨一点啊,应该就是这个样子啊,那咱们现在把它就复制过来,这样的话就可以了啊,然后最后在里边咱调一下我们那个方法,然后把那数据传啊,最终的效果应该可以做到就是每天凌晨一点啊这样一个程序。然后把这个写完啊。这个方法调一下,咱是re count,那你注意啊,在这里边要传入你这个日期,但是这个方法中没法从其他地方传日期,比如说我们设置这么一个规则,在每天凌晨一点,咱怎么做呢?把,我们这个就是啊把。
21:00
前一天的这个数据进行这个查询,然后添加啊,咱们要做这个事情,比如说什么意思呢?大家注意啊,比如我今天是3月9号,那我怎么做,就把我们比如在3月9号这个凌晨一点,我把3月8号的数据进行添加,比如我今天是3月10号,那我在3月10号的一点把3月9号数据最后添加,那就取前一天这个数据就做这个事情。那怎么做给大家写一下啊,就是做法很多种方式,第一个也可以得到当前的天,然后再取到它的前一天,当然这个日期操作呢,我在今天这个代码中给大家写了一个工具类啊,我们来找一下啊,咱就工具类直接操作可以了,就是我这个位置啊,给各位提供了很多工具类,希望各位把工具类都给它整理出来以后,你在工作中再写类似操作,我这工具类可以直接去用,确实会比较方便,不需要你再去单独写这些代码。劳保公寓内。
22:01
我就直接啊复制过来。这个叫。U,然后把它拿过来,呃,多了一个S啊,名字改一下。这个啊。然后咱们把工具类直接复制过来啊,这是我提前写好一个类,这工具类是干什么的,就可以取到你的日期,比如说我现在啊,这个方法我取到,比如你加日期,比如说我当前日期是你个date,如果你是前一天,那就减一比说后一天它就加一,就用这个来得到那这个啊,比如说这方法有个现成的方法,咱就来试一下啊这个方法。这个哎,我先把它先注掉啊,咱先把这工具类做个测试,然后咱再改啊,找到里边你看我下面。有这么两个输出,第一个我们调这个方法得到你当前的日期,然后这个方法就得到我的前一天日期,就让这值减一,那咱把它执行,我们来测试一下啊,看这两个方法都输出什么值,然后咱们用在我们的项目中。
23:04
各位看啊,第一个当前日期3月14号,然后第二个减一是不是前一天,所以我们现在用这个是不是合适,因为我要把凌晨一点的前一天的那个数据已经统计,所以咱们用这段代码做个操作就可以了,就是加上date us这个form date加上你的当前日期,然后让它在减一把这个可以实现啊,也就这个代码。我就直接啊输入过来了,然后放到我们的。就是这个位置啊。写到这里啊,当前日期减一把这个。依赖引进来啊,就是它。这个哈。把这个分号给它去掉,所以这样的话呢,我们这个就完成了,而这个程序只要我们一执行,那他在每天凌晨一点都会去执行这个方法,然后把数据会自动进行同步,因为咱用这个做测试,这是每隔五秒咱可以做操作,那这个也可以做到啊,就是它的频率要稍微高一点啊,它是频率低一点啊,就是每天凌晨知晓。
24:08
所以咱们用它独立完善啊,就是通过这个各位主要掌握这个定式任务该怎么整合,包括表达式大概怎么去写,以及表达式是什么样一个特点啊,各位把这个给他知道啊,所以咱们现在这个就完成了。另外就是还是我强调的这个值需要16位,你不能写七位,写七位它会报错,因为它虽然七位是年,但是默认就取当前年里边值是六位,不能写七位。这各位注意啊,就是你不能再多个星号,这是不对的啊,它会报错。所以这是关于定时任务一个说明,定时任务在实际中我们也会经常做到,经常做这种自动处理,比如说你自动统计数据,自动做成操作,用这个在实际中经常做到啊,咱们这是也是一个比较实际一个场景。那这个啊,我们就介绍完了啊。
我来说两句