首页 > 其他分享 >springboot 中每分钟执行一次的 cron 表达式怎么写

springboot 中每分钟执行一次的 cron 表达式怎么写

时间:2024-07-04 19:54:55浏览次数:17  
标签:Cron springboot Spring cron 任务 执行 每分钟 表达式

在Spring Boot中,如果你需要使用Cron表达式来每分钟执行一次任务,可以使用Spring的@Scheduled注解。Cron表达式是一种用来表示时间点的字符串,通过这些字符串,你可以非常灵活地定义任务的执行时间。

Cron表达式格式

Cron表达式由六个或七个字段组成,按以下顺序排列:

  1. 秒(Seconds): 0-59
  2. 分钟(Minutes): 0-59
  3. 小时(Hours): 0-23
  4. 日期(Day of month): 1-31
  5. 月份(Month): 1-12 或者 JAN-DEC
  6. 星期(Day of week): 0-7 或者 SUN-SAT(0 和 7 都是星期天)
  7. 年(可选,Year): 1970-2099

每分钟执行一次的Cron表达式

要每分钟执行一次,可以使用以下Cron表达式:

* * * * * *

解释:

  • 第一个 * 表示每秒。
  • 第二个 * 表示每分钟。
  • 第三个 * 表示每小时。
  • 第四个 * 表示每个月的每一天。
  • 第五个 * 表示每个月。
  • 第六个 * 表示每周的每一天。

在Spring Boot中使用Cron表达式

以下是一个示例,展示如何在Spring Boot中配置一个每分钟执行一次的任务。

  1. 确保在Spring Boot应用中启用了调度支持。在你的主应用程序类上添加@EnableScheduling注解:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}
  1. 创建一个调度任务类,并使用@Scheduled注解定义任务执行时间:
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class MyScheduledTask {

    @Scheduled(cron = "* * * * * *")
    public void executeTask() {
        System.out.println("Task executed at: " + new java.util.Date());
    }
}

详细解释

  • @Component: 标注这个类为Spring管理的组件,使其可以被Spring上下文扫描到。
  • @Scheduled(cron = "* * * * * *"): 标记方法为一个定时任务,使用Cron表达式定义执行时间。这里表示每分钟执行一次。

实践中的考虑

  • 应用性能:频繁执行的任务可能会对系统性能产生影响,确保任务的执行时间在可以接受的范围内。
  • 错误处理:确保定时任务中的逻辑有充分的错误处理和日志记录,以便在任务失败时进行追踪和修复。
  • 任务状态监控:可以结合Spring Boot Actuator或其他监控工具对定时任务的执行情况进行监控。

这样配置后,你的Spring Boot应用将每分钟执行一次executeTask方法中的任务。


那么每分钟执行一次的cron定时任务,它第一次执行是第1秒还是第61秒呢?

在Spring Boot中使用@Scheduled注解配置的Cron表达式来每分钟执行一次任务时,任务将会在每分钟的第0秒执行。因此,任务第一次执行是在应用启动后的第一个整分钟(即第0秒),而不是第61秒。

每分钟执行一次的Cron表达式

为了确保每分钟执行一次任务,你可以使用以下Cron表达式:

@Scheduled(cron = "0 * * * * *")
public void executeTask() {
    System.out.println("Task executed at: " + new java.util.Date());
}

解释

  • 0 表示秒字段,即在每分钟的第0秒执行任务。
  • * 表示分钟字段,即每分钟。
  • 其他字段也使用 *,表示每小时、每天、每月和每周的每一天。

示例代码

以下是完整的示例,展示如何在Spring Boot应用中配置和使用这个Cron表达式:

主应用程序类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

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

定时任务类

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class MyScheduledTask {

    @Scheduled(cron = "0 * * * * *")
    public void executeTask() {
        System.out.println("Task executed at: " + new java.util.Date());
    }
}

行为描述

  1. 应用启动:当Spring Boot应用启动后,Spring会扫描带有@Scheduled注解的方法,并根据Cron表达式来调度这些任务。
  2. 第一次执行:任务将在每分钟的第0秒执行。因此,第一次执行会在应用启动后的第一个整分钟的第0秒。
  3. 后续执行:任务将继续在每分钟的第0秒执行。

示例时间点

假设应用在 12:34:45 启动:

  • 第一次执行时间:12:35:00
  • 第二次执行时间:12:36:00
  • 以此类推,每分钟的第0秒。

总结

在Spring Boot中使用@Scheduled(cron = "0 * * * * *")配置每分钟执行一次的任务时,任务会在每分钟的第0秒执行。任务第一次执行是在应用启动后的第一个整分钟的第0秒,而不是第61秒。

标签:Cron,springboot,Spring,cron,任务,执行,每分钟,表达式
From: https://www.cnblogs.com/gongchengship/p/18284550

相关文章

  • 基于SpringBoot的财务管理系统
    系统主要包括首页,个人中心,员工管理,部门管理,员工工资管理,工资调整管理,资产类别管理,固定资产管理,经营信息管理,序时账管理,年度利润管理,系统管理等功能模块。......
  • 如何在SpringBoot项目中使用Activiti工作流(整套代码)
      前言activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,一套完整并且实际运用在多套项目中的案例,满足日常业务流程审批需求。一、项目形式springboot+vue+activiti集成了activiti在线编辑器,流行的前后端分离部署开发模式,快速开发平台,可插拔工作流服务......
  • springboot006基于SpringBoot的网上订餐系统
    简介【毕设项目推荐javaweb项目】基于springboot+vue的网上订餐系统(springboot006)适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考,不得用于商业或者非法用途,否则,一切后果请用户自负。看运行截图看第五章获取资料方式项目编号:springboot00......
  • SpringBoot拦截器中获取注解、拦截器中注入Service
    拦截器中获取注解来源:https://blog.csdn.net/wangmx1993328/article/details/81030268/publicclassJWTInterceptorimplementsHandlerInterceptor{privateSysSettingServicesysSettingService;//构造函数传入ServicepublicJWTInterceptor(SysSettingServ......
  • 基于java+springboot+vue实现的校园外卖服务系统(文末源码+Lw)292
    摘   要传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,外卖信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广大用户的需求,因此就应运而生出相应的校园外卖服务系统。本......
  • 基于java+springboot+vue实现的宠物商城网站(文末源码+Lw)273
    摘   要传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,商品信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广大用户的需求,因此就应运而生出相应的宠物商城网站。本宠物......
  • SpringBoot自动装配
     没有SpringBoot的情况下,如果我们需要引入第三方依赖,需要手动配置,非常麻烦。但是,SpringBoot中,我们直接引入一个starter即可。比如你想要在项目中使用redis的话,直接在项目中引入对应的starter即可。<dependency><groupId>org.springframework.boot</groupId......
  • ssh 定时任务 的时间表示解释 cronExpression
    1.cron表达式格式:{秒数}{分钟}{小时}{日期}{月份}{星期}{年份(可为空)}2.cron表达式各占位符解释:{秒数}==>允许值范围:0~59,不允许为空值,若值不合法,调度器将抛出SchedulerException异常"*"代表每隔1秒钟触发;","代表在指定的秒数触发,比如"0,15,45"代表0秒、15秒和45......
  • springboot项目国产化适配,jar改war包碰到的坑-tomcat版本要适配(非法访问:此Web应用程序
    项目原来是jar包运行,国产化适配要改成war包。可以参考https://blog.csdn.net/NAMELZX/article/details/138123405或者其他jar 改成 war 的文章。改成war后,在本地tomcat8上运行,一直报org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading非法......
  • springboot基于web的酒店客房管理系统
    文章目录目录文章目录论文目录项目介绍开发环境系统实现论文参考论文目录1系统概述1.1研究背景1.2研究目的1.3系统设计思想2相关技术2.1 MYSQL数据库2.2 B/S结构2.3 SpringBoot框架简介2.4 VUE框架简介3系统分析3.1可行性分析3.1.1技术......