定时任务 | @scheduled


SpringBoot为我们内置了@Scheduled定时任务,下面我们就来配置下这个注解,找到入口程序添加注解@EnableScheduling,添加注解后SpringBoot就已经认定了我们要使用定时任务来完成一些业务逻辑了,内部会对应原始配置定时任务添加对应的配置文件

@EnableScheduling
@SpringBootApplication
public class SpringBootVenusApplication {

    public static void main(String[] args) {
        // 启动spring-boot-venus
        ConfigurableApplicationContext context = SpringApplication.run(SpringBootVenusApplication.class, args);
    }
}


@scheduled

@scheduled注解用来配置到方法上来完成对应的定时任务的配置,如执行时间,间隔时间,延迟时间等等,下面我们就来详细的看下对应的属性配置

下面我们来配置@Scheduled,来完成每小时输出内容

/**
     * 每小时执行一次
     */
    @Scheduled(cron = "0 0 0/1 * * ? ")
    public void hello() throws Exception {
       System.out.println("HelloScheduled...");
    }


cron属性

Seconds : 可出现”, – * /”四个字符,有效范围为0-59的整数
Minutes : 可出现”, – * /”四个字符,有效范围为0-59的整数
Hours : 可出现”, – * /”四个字符,有效范围为0-23的整数
DayofMonth : 可出现”, – * / ? L W C”八个字符,有效范围为0-31的整数
Month : 可出现”, – * /”四个字符,有效范围为1-12的整数或JAN-DEc
DayofWeek : 可出现”, – * / ? L C #”四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表明星期天,2表明星期一, 依次类推
Year : 可出现”, – * /”四个字符,有效范围为1970-2099年

下面简单举几个例子:

“0 0 12 * * ?” 每天中午十二点触发
“0 15 10 ? * *” 每天早上10:15触发
“0 15 10 * * ?” 每天早上10:15触发
“0 15 10 * * ? *” 每天早上10:15触发
“0 15 10 * * ? 2005” 2005年的每天早上10:15触发
“0 * 14 * * ?” 每天从下午2点开始到2点59分每分钟一次触发
“0 0/5 14 * * ?” 每天从下午2点开始到2:55分结束每5分钟一次触发
“0 0/5 14,18 * * ?” 每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发
“0 0-5 14 * * ?” 每天14:00至14:05每分钟一次触发
“0 10,44 14 ? 3 WED” 三月的每周三的14:10和14:44触发
“0 15 10 ? * MON-FRI” 每个周一、周二、周三、周四、周五的10:15触发


initialDelay属性

该属性的含义是指在项目启动后在定义的时间后开启定时任务,配合fixedRate()和fixedDelay()使用


fixedRate属性

该属性的含义是调用固定周期(以毫秒为单位)执行方法:就是上一次开始执行时间点之后延迟执行

    //在项目启动 5s 后,每隔 2s 调用定时任务
    @Scheduled(initialDelay = 5000, fixedRate = 2000)
    public void testScheduled() throws Exception {
        System.out.println("开启任务:" + new Date());
        //模拟任务执行所需时间
        Thread.sleep(1000);
        System.out.println("执行任务:" + new Date());
    }

  1. 当任务执行时间小于或等于fixedRate的参数时:定时任务以fixedRate的参数周期进行调用
  2. 当任务执行时间大于fixedRate的参数时:定时任务不以fixedRate的参数周期进行调用,而是在上一次执行完毕时间直接执行

fixedDelay属性

该属性的含义是上次调用结束和下一次调用结束之间的固定周期(以毫秒为单位)执行方法:就是上一次执行完毕时间点之后延迟执行。


注意:

1、cron、fixedDelay、fixedRate 三者之间不能共存!!!
2、fixedDelay、fixedRate不能单独使用!!!
会抛出一个错误:

Caused by: java.lang.IllegalStateException: Encountered invalid @Scheduled method  testScheduled : Exactly one of the  cron ,  fixedDelay(String) , or  fixedRate(String)  attributes is required.

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
丫丫女孩纸的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容