spring boot 实现定时任务(Spring Task)

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是精准指定间隔,所以相比SimpleTriggerCroTrigger更加常用。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)

cron表达式常用

image-20240301195722097

  • 33
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值