news 2026/8/12 15:52:08

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/8/12 1:04:43

N-乙酰-D-半乳糖胺——引领靶向递送新时代的关键糖分子 CAS:1811-31-0

在药物化学与递送系统飞速发展的今天,精准靶向已成为提高疗效、降低毒副作用的核心追求。N-乙酰-D-半乳糖胺(GalNAc),作为一种天然存在的氨基糖,正从基础生物化学研究走向生物医药应用的前沿,成为开发肝靶向…

作者头像 李华
网站建设 2026/8/11 15:32:31

【数据库】【Redis】基本概念和特点

Redis的基本概念和特点 Redis(Remote Dictionary Server)是一种开源的、基于内存的键值存储系统,支持多种数据结构(如字符串、哈希、列表、集合、有序集合等)。其核心特点包括: 高性能:数据存储…

作者头像 李华
网站建设 2026/8/11 15:32:25

基于Spring Boot 图书管理系统

基于Spring Boot 图书管理系统 一、系统背景与目的 随着信息技术发展和图书馆规模扩大,传统图书管理方式难以满足现代需求。基于 Spring Boot 开发的图书管理系统,旨在通过实现图书增删改查、用户管理、借阅管理等功能,提升管理效率与准确性…

作者头像 李华
网站建设 2026/8/11 15:32:19

Linux网络日志怎么查看?

Linux网络日志是排查网络故障、检测入侵行为的核心依据,但不同服务的日志分散在不同目录,且日志格式复杂,新手常陷入 找不到日志、看不懂内容的困境。那么Linux网络日志怎么查看?以下是详细内容介绍。Linux系统中的网络日志主要用于记录与网…

作者头像 李华
网站建设 2026/8/11 15:32:15

第十八篇:Day52-54 前端跨端开发进阶——从“多端适配”到“跨端统一”(对标职场“全栈化”需求)

一、前置认知:跨端开发的核心价值与职场痛点随着移动互联网、小程序、桌面应用等场景的爆发,企业面临“多端布局”与“研发成本”的矛盾:某电商平台需维护iOS、Android、H5、微信小程序4套代码,新增一个商品详情页需4个团队同步开…

作者头像 李华