介绍:@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系统为你跑定时任务。所以,了解一些这种配置格式,还是有必要的。
底层原理
这个后续补充吧,有猿友想看后续的可以点个赞,我尽快来补充。当然,也可以直接看这个,了解一下底层,做一下优秀的程序员。