springboot实现简单的定时器功能:@Scheduled

    技术2022-07-16  81

    介绍:@Scheduled是什么

    @Scheduled是spring自带的定时器注解,由于约定大于配置的思想,里面已经有默认的参数配置好了一个线程池给你放一些定时任务。当然,你也可以通过继承对应的配置类,自己实现schedule相关的属性。

    使用场景:为什么要用

    主要是项目中有一些场合,需要定时执行某些更新的任务。

    怎么用:来个Demo给你理解

    代码: package com.demo.javaspring.定时器; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Calendar; @Component @EnableScheduling public class scheduleDemo { Logger logger = LoggerFactory.getLogger(scheduleDemo.class.getName()); @Scheduled(cron = "0 */1 * * * ?") public void run() { logger.info("Current time is {}" , Calendar.getInstance().getTime()); System.out.println(); } }

    这里实现的是一个每分钟日志输出一个当前时间的功能。可以看出,最关键的代码就是@EnableScheduling和@Scheduled(cron = “0 */1 * * * ?”)这两句代码了。其中,前者是将当前的类结合定时器的配置类ScheduledConfigulation,开启默认的schedule线程。后者是将某个方法放入线程池中,然后cron属性是配置定时器的时间。cron是一种类似正则表达式的匹配模板,记住它的基本语法规则,还是很容易写的。它至少有六个位置可以配置,分别对应的是秒,分,时,日,月,星期(英文习惯是星期放在后面的),而第七个位置年份可有可无。具体的配置关系和配置例子可以看这篇文章,我就不详细解释了。

    值得注意的是,这个cron的匹配规则算是通用的一个定时器配置格式了。在linux下,配置定时脚本sh也是这样的格式:crontab指令就可以开启,然后输入定时指令,例如:0 */1 * * * ? + 脚本位置,就可以让linux系统为你跑定时任务。所以,了解一些这种配置格式,还是有必要的。

    底层原理

    这个后续补充吧,有猿友想看后续的可以点个赞,我尽快来补充。当然,也可以直接看这个,了解一下底层,做一下优秀的程序员。

    关联知识

    说到定时任务,那么也要提一下java自带的timerTask类了,还有任务调度框架quartz。想要了解的可以看看。还有这篇高赞的文章也可以看看quartz相同的另一个任务调度框架XXL-JOB
    Processed: 0.011, SQL: 9