定时任务 | @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.
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容