spring boot 实现定时任务(Spring Task)
一、Spring Task介绍
-
从Spring 3开始,Spring自带了一套定时任务工具Spring-Task,可以把它看成是一个轻量级的Quartz,使用起来十分简单,除Spring相关的包外不需要额外的包,支持注解和配置文件两种形式。通常情况下在Spring体系内,针对简单的定时任务,可直接使用Spring提供的功能。
-
本文使用的是基于
注解
形式的实现
二、简单实现代码(执行周期写死)
1、前提
- 在Spring Boot项目中,需要在启动类上添加
@EnableScheduling
来开启定时任务。
2、代码
@Component
用于实例化类,这个与定时任务无关。@Scheduled
指定该方法是基于定时任务进行执行,具体执行的频次是由cron
指定的表达式所决定。
@Component("taskJob")
public class TaskJob {
@Scheduled(cron = "0 0 3 * * ?")
public void job1() {
System.out.println("通过cron定义的定时任务");
}
@Scheduled(fixedDelay = 1000L)
public void job2() {
System.out.println("通过fixedDelay定义的定时任务");
}
@Scheduled(fixedRate = 1000L)
public void job3() {
System.out.println("通过fixedRate定义的定时任务");
}
}
cron介绍
CronTrigger
功能非常强大,是基于日历的作业调度,而SimpleTrigger
是精准指定间隔,所以相比SimpleTrigger
,CroTrigger
更加常用。CroTrigger
是基于Cron
表达式的。- 假如说
*/15 * * * * ?
,这个的意思是每隔15
秒执行一次方法
fixedDelay和fixedRate的区别
fixedRate
有一个时刻表的概念,在任务启动时,T1、T2、T3就已经排好了执行的时刻,比如1分、2分、3分,当T1的执行时间大于1分钟时,就会造成T2晚点,当T1执行完时T2立即执行。fixedDelay
比较简单,表示上个任务结束,到下个任务开始的时间间隔。无论任务执行花费多少时间,两个任务间的间隔始终是一致的。
三、数据库动态实现执行周期改变
四、spring Task缺点
- Spring Task 本身不支持持久化,也没有推出官方的分布式集群模式,只能靠开发者在业务应用中自己手动扩展实现,无法满足可视化,易配置的需求。
参考:Java中定时任务的6种实现方式,你知道几种?_implements job-CSDN博客
五、补充学习cron表达式
1、产生背景
cron表达式最初是由Unix操作系统中的cron守护进程所使用的一种语法规则,用于设置定时任务。cron守护进程是Unix系统中的一个后台进程,用于周期性地执行指定的命令或脚本。它可以根据用户的需求,按照指定的时间间隔或时间点来执行任务,通常用于定时备份、清理日志、发送邮件等操作。
2、什么是cron表达式?
为了方便用户设置定时任务,cron守护进程引入了一种简单的语法规则,即cron表达式。cron表达式由6个字段组成,分别表示秒、分、小时、日期、月份和星期几。每个字段都可以设置一个数字、一组数字(用逗号分隔)、一段数字范围(用短横线分隔)、通配符(表示任意值)或者特定的字符(如星期几的英文缩写)。通过这种语法规则,用户可以非常灵活地设置定时任务,满足不同的需求。
* * * * * *
- - - - - -
| | | | | |
| | | | | +--- 星期几 (0 - 6) (0表示周日)
| | | | +----- 月份 (1 - 12)
| | | +------- 日期 (1 - 31)
| | +--------- 小时 (0 - 23)
| +----------- 分钟 (0 - 59)
+------------- 秒 (0 - 59)