news 2026/2/17 12:18:54

8.SpringTask

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
8.SpringTask
8.1 定时任务

定时任务即系统在特定时间执行一段代码,它的场景应用非常广泛:

购买游戏的月卡会员后,系统每天给会员发放游戏资源。

管理系统定时生成报表。

定时清理系统垃圾。

定时任务的实现主要有以下几种方式:

  1. Java自带的java.util.Timer类,这个类允许调度一个java.util.TimerTask任务。使用这种方式可以让程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。
  2. Quartz。这是一个功能比较强大的的调度器,可以让程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂。
  3. Spring3.0以后自带Spring Task,可以将它看成一个轻量级的Quartz,使用起来比Quartz简单许多,在课程中我们使用Spring Task实现定时任务
8.2 SpringTask_Cron表达式

SpringTask依靠Cron表达式配置定时规则。Cron表达式是一个字符串,分成六个或七个域,有以下两种语法格式:

1.Seconds Minutes Hours DayofMonth Month DayofWeek Year

2.Seconds Minutes Hours DayofMonth Month DayofWeek

Seconds(秒):域中可出现,-*/四个字符,以及0-59的整数

*:表示匹配该域的任意值,在Seconds域使用*,表示每秒钟都会触发

,:表示列出枚举值。在Seconds域使用5,20,表示在5秒和20秒各触发一次。

-:表示范围。在Seconds域使用5-20,表示从5秒到20秒每秒触发一次

/:表示起始时间开始触发,然后每隔固定时间触发一次。在Seconds域使用5/20, 表示5秒触发一次,25秒,45秒分别触发一次。

Minutes(分):域中可出现,-*/四个字符,以及0-59的整数

Hours(时):域中可出现,-*/四个字符,以及0-23的整数

DayofMonth(日期):域中可出现,-*/?LWC八个字符,以及1-31的整数

C:表示和当前日期相关联。在DayofMonth域使用5C,表示在5日后的那一天触发,且每月的那天都会触发。比如当前是10号,那么每月15号都会触发。

L:表示最后,在DayofMonth域使用L,表示每个月的最后一天触发

W:表示工作日,在DayofMonth域用15W,表示最接近这个月第15天的工作日触发,如果15号是周六,则在14号即周五触发;如果15号是周日,则在16号即周一触发;如果15号是周二则在当天触发。

  • 注:

    1. 该用法只会在当前月计算,不会到下月触发。比如在DayofMonth域用31W,31号是周日,那么会在29号触发而不是下月1号。
    2. 在DayofMonth域用LW,表示这个月的最后一个工作日触发。

Month(月份):域中可出现,-*/四个字符,以及1-12的整数或JAN-DEC的单词缩写

DayofWeek(星期):可出现,-*/?L#C八个字符,以及1-7的整数或SUN-SAT 单词缩写,1代表星期天,7代表星期六

C:在DayofWeek域使用2C,表示在2天后的那一天触发,且每周的那天都会触发。比如当前是周一,那么每周三都会触发。

L:在DayofWeek域使用L,表示在一周的最后一天即星期六触发。在DayofWeek域使用5L,表示在一个月的最后一个星期四触发。

#:用来指定具体的周数,#前面代表星期几,#后面代表一个月的第几周,比如5#3表示一个月第三周的星期四。

?:在无法确定是具体哪一天时使用,用于DayofMonth和DayofWeek域。一般定义了其中一个域,另一个域是不确定的,比如每月20日触发,无法确定20日是星期几,写法如下:0 0 0 20 * ?;或者在每周一触发,此时无法确定该日期是几号,写法如下:0 0 0 ? * 2

Year(年份):域中可出现,-*/四个字符,以及1970~2099的整数。该域可以省略,表示每年都触发。

8.3 注解实现

1.在配置类上添加@EnableScheduling注解

2.在方法上方添加@Scheduled,指定该方法定时执行

// 定时任务类 @Component public class MySpringTask2 { // 打印时间 @Scheduled(cron = "* * * * * *") public void printTime(){ SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); String now = sdf.format(new Date()); System.out.println(now+"定时任务2"); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/16 8:14:37

ZooKeeper:enableACL和requireClientSASLAuth

目录标题 🧠 一、ZooKeeper 的两个安全维度🎯 二、访问控制(ACL)1)什么是 ACL?2)ACL 相关的 Scheme(核心)3)是否开启 ACL 🔐 三、客户端认证&…

作者头像 李华
网站建设 2026/2/17 5:44:49

为什么K8s 1.24 的容器时间调整会影响宿主机的时间啊?

目录标题一、核心真相(先给结论)✅ Linux 中:二、为什么容器“有时能改时间,有时不能”?🔑 决定因素不是 K8s,而是 Linux capability三、那为什么在 K8s 1.24 更容易出现?四、K8s 1.…

作者头像 李华
网站建设 2026/2/5 9:44:09

AI时代核心竞争力:手写多智能体系统,不依赖LangChain/LlamaIndex

本文详解如何不依赖高级编排框架,使用原生Python和LLM API构建Deep Research Agent多智能体系统。系统采用反思式搜索循环和并行处理机制,实现自主规划、多轮搜索优化和结构化报告生成。文章提供完整技术实现细节、架构设计和开源代码,强调理…

作者头像 李华
网站建设 2026/2/16 19:22:54

WebSocket 对比 MQTT通信优势

——以充电桩系统为例在物联网项目中,通信协议的选择直接影响着系统的稳定性、实时性和开发效率。本文将以一个典型的充电桩系统(包含充电桩、云端服务器、微信小程序三个节点)为例,深入探讨 MQTT 和 WebSocket 两大协议的应用场景…

作者头像 李华
网站建设 2026/2/4 22:48:22

基于springboot面料花型试衣系统

基于Spring Boot的面料花型试衣系统是一个结合了后端技术和前端界面设计的综合性平台,它利用Spring Boot框架的高效性和稳定性,为用户提供了一个便捷、实时的试衣体验。以下是对该系统的详细介绍: 一、系统概述 面料花型试衣系统是一个专为面…

作者头像 李华