一、定时任务
通过在配置类注解@EnableScheduling来开启对定时任务的支持,然后在要执行计划任务的方法上注解@Scheduled,声明这是需执行的定时任务!
二、注解描述
@EnableScheduling: 启动类里面使用@EnableScheduling 注解开启功能,开启自动扫描;
@Scheduled: 添加在需要执行的定时方法上,接下来描述一下@Scheduled参数的具体定义:
1、fixedDelay和fixedRate,单位是毫秒;
区别:fixedRate---,每多少毫秒执行一次,与具体业务执行时间没关系;而fixedDelay是当任务执行完毕后按照设定的毫秒值执行任务。所以根据实际业务不同,我们会选择不同的方式。
2、cron表达式:依据业务需求,可设定具体的任务执行时间,预定时间一到就会自动执行;
cron一共有7位,但是最后一位是年,可以留空,一般情况可以写6位:
* 第一位,表示秒,取值0-59
* 第二位,表示分,取值0-59
* 第三位,表示小时,取值0-23
* 第四位,日期天/日,取值1-31
* 第五位,日期月份,取值1-12
* 第六位,星期,取值1-7,星期一,星期二...,注:不是第1周,第二周的意思
另外:1表示星期天,2表示星期一。
* 第7为,年份,可以留空,取值1970-2099
3、cron中,还有一些特殊的符号,含义如下:
(*)星号:可以理解为每的意思,每秒,每分,每天,每月,每年...
(?)问号:问号只能出现在日期和星期这两个位置。
(-)减号:表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12
(,)逗号:表达一个列表值,如在星期字段中使用“1,2,4”,则表示星期一,星期二,星期四
(/)斜杠:如:x/y,x是开始值,y是步长,比如在第一位(秒) 0/15就是,从0秒开始,每15秒,最后就是0,15,30,45,60 另:*/y,等同于0/y
4、举例描述cron:
0 0 8 * * ? 每天8点执行
0 30 8 * * ? 每天8点30分执行
0 30 5 ? * * 每天8点30分执行,与上面作用相同,区别特殊符号
0 5/5 8 * * ? 每天8点的 5分,10分,15分,20分,35分,40分,45分,50分,55分这几个时间点执行
0 30 8 ? * 1 每周星期天,8点30分 执行,注:1表示星期天
0 30 8 ? * 1#3 每个月的第三个星期,星期天执行,#号只能出现在星期的位置
三、Demo演示
DateUtils时间转换工具类
@EnableScheduling //开启对定时任务的支持
@SpringBootApplication
public class BnlApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(BnlApplication.class, args);
}
//表示方法执行完成后5秒执行
@Scheduled(fixedDelay = 6000)
public void fixedDelayJob() {
System.out.println("fixedDelay每隔6秒" +"-------"+ DateUtils.format(new Date()));
}
//当前任务每隔3秒执行一次
@Scheduled(fixedRate = 3000)
public void fixedRateJob() {
System.out.println("fixedRate每隔3秒" +"-------"+ DateUtils.format(new Date()));
}
//表示每天19点42执行
@Scheduled(cron = "0 42 19 * * ? ")
public void cronJob() {
System.out.println("cron每天19点42执行" + "------" + DateUtils.format(new Date()));
}
}
四、运行结果
cron每天19点42执行------2020-01-01 19:42:00
fixedRate每隔3秒-------2020-01-01 19:42:01
fixedRate每隔3秒-------2020-01-01 19:42:04
fixedDelay每隔6秒-------2020-01-01 19:42:04
fixedRate每隔3秒-------2020-01-01 19:42:07
fixedRate每隔3秒-------2020-01-01 19:42:10
fixedDelay每隔6秒-------2020-01-01 19:42:10
fixedRate每隔3秒-------2020-01-01 19:42:13
fixedRate每隔3秒-------2020-01-01 19:42:16
fixedDelay每隔6秒-------2020-01-01 19:42:16
fixedRate每隔3秒-------2020-01-01 19:42:19