您的位置:首页 > 科技 > IT业 > 快速上手,spring boot3整合task实现定时任务

快速上手,spring boot3整合task实现定时任务

2024/11/16 5:59:16 来源:https://blog.csdn.net/2301_78646673/article/details/140595508  浏览:    关键词:快速上手,spring boot3整合task实现定时任务

在已经上线的项目中,定时任务是必不可少的。基于spring boot自动装配的原理,我们要集成task定时任务还是非常简单的。只需要简单的两步就可以实现。

1、创建一个spring boot项目,并在项目的启动类(也不一定非要是启动类,只要@Configuration注解标识过的配置类就行)上加@EnableScheduling注解。这个注解用于开启定时任务的支持

@SpringBootApplication
@EnableScheduling
public class Springjdk21TestApplication {public static void main(String[] args) {SpringApplication.run(Springjdk21TestApplication.class, args);}}

2、直接在项目中使用定时任务即可。

创建一个bean。在这个bean中创建想要定时执行的方法,并在这个方法上加入@Scheduled注解即可。

@Component
public class TestTask {
/*** 定时任务,每隔5秒执行一次*/
@Scheduled(fixedRate = 5000)
public void sayHello() {System.out.println("say hello========>"+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));}}

fixedRate表示从启动项目开始,每个多少毫秒执行一次。

现在启动我们的主类,可以看到定时任务已经执行;

可以看到,每个5秒钟,控制台输出了一次打印语句。

当然,使用fixedRate参数只能实现简单的定时任务,假如我们的定时任务比较复杂呢。比如,我们要自定义任务的开始时间和执行间隔,这时fixedRate已经不能满足我们的需求了,我们需要使用另一种方法,cron表达式。

cron表达式是一种用于配置定时任务(计划任务)执行时间的字符串表达式

一个cron表达式由6或7个字段组成,分别表示如下时间单位:

  1. 秒(Seconds) - 0 - 59
  2. 分(Minutes) - 0 - 59
  3. 小时(Hours) - 0 - 23(24小时制)
  4. 日期(Day of Month) - 1 - 31
  5. 月份(Month) - 1 - 12 或 JAN-DEC
  6. 星期几(Day of Week) - 0 - 7 或 SUN-SAT(7或0表示星期天)
  7. 年份(Year,可选) - 1970 - 2099

字段之间使用空格分隔,表示时间的顺序。

(在标准的cron表达式中,通常是6个字段,不包括年份。但是,有些系统和应用允许扩展cron表达式到7个字段,加入年份字段。(7个字段)可能不被所有cron作业调度器支持,特别是在一些Unix/Linux系统中。在Java的Spring框架中,如果你使用@Scheduled注解,通常不需要指定年份,因为Spring的调度器默认不会扩展到7个字段。)

当然,现在的spring boot的高版本也不支持cron的7个参数了。cron表达式的设计初衷是为了在操作系统层面设置周期性的计划任务,而不是用来安排一次性的特定日期和时间。如果你需要在特定年份执行任务,你应该使用应用程序逻辑来处理年份,或者选择一个不同的调度方法来处理跨年度的任务。

特殊字符:

  • *:代表所有可能的值。例如,在分钟字段中使用*,表示每分钟。
  • ?:表示不指定值。只能在日期和星期几字段中使用。
  • -:表示一个范围。例如,10-12 小时 表示从上午10点到12点。
  • /:表示起始时间开始,每隔一定的间隔执行。例如,在分钟字段中使用0/30,表示每30分钟。
  • L:表示“Last”,只能用于日期和星期几字段。例如,在日期字段使用L,表示月份的最后一天。
  • W:表示有效工作日(周一到周五),不能和L一起使用,只能用于日期字段。
  • #:表示星期几的第几个周。例如,6#3表示某月的第三个星期天。

一般,我们只需要知道cron表达式对应的含义就行,不需要我们自己进行编写。使用到的时候直接在往上搜一个在线的生成网址即可。

cron的在线生成网址:在线Cron表达式生成器 (qqe2.com)

我们需要的时候,直接使用图形化的界面点击生成相应的cron表示式即可。

* * 12 1 * ? 

这个cron是我使用网址生成的,表示每个月1号的中午12点执行一次。

@Component
public class TestTask {
/*** 定时任务,每隔5秒执行一次*/
@Scheduled(cron = "* * 12 1 * ?")
public void sayHello() {System.out.println("say hello========>"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
}}

由于spring boot的自动装配,官方已经帮我们做了很多工作。我们只需要安装官方的约定,简单的做一些配置就可以轻松的实现绝大多数功能。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com