spring的schedule定时任务

news/2025/1/21 15:25:32/文章来源:https://www.cnblogs.com/qwg-/p/18512883

日常中,如果定时任务比较多,可以采用xxl-job这样第三方工具,当然,如果只有一两个,可以使用spring的schedule,方便好用,接下去就让我们去了解下

一、使用;

二、关于注解中一些属性的使用;

实现本质是基于 java 中的 ScheduledExecutorService 类的 schedule 方法。

OK,接下去就进入主题;

一、使用

1、在springboot工程的启动类上添加注解@EnableScheduling

@SpringBootApplication
@EnableScheduling   //这个
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);// 第一次拉取代码
    }}

2、建立一个设置定时任务的类,在类上记得添加注解@Component,注入到spring容器中,让其管理,代码如下

@Component
public class ScheduledDemo {@Scheduled(cron = "10,30,50 * * * * *")public void test1(){LocalDateTime now = LocalDateTime.now();DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");System.out.println("定时任务执行"  + ":" + formatter.format(now));}}

3、在执行的方法上添加@Scheduled注解,基本就完成了整合使用。

从控制台输出就可以看到执行效果

 

二、@Scheduled注解

该注解有以下属性:

1、corn:corn表达式

从左到右用空格隔开分别是:【秒 分 时 日 月 周 年(可省略)】

第一个位置:Seconds 秒:区间 0-59 秒,代表一分钟内的秒数。

第二个位置:Minutes 分:区间 0-59 分,代表一小时内的分钟数。

第三个位置:Hours 时:区间 0-23 时,代表一天中的小时数。

第四个位置:Day of month 日:区间 1-31 (?根据每月有多少天来),代表一月中的多少号。

第五个位置:Month 月:区间 1-12 ,代表一年中的月份。

第六个位置:Day of week 周:区间 1-7或者英文星期的缩写,代表星期几。

(注意:1 对应周日 SUN , 7 对应周六 SAT ,如此循环)
 第七个位置:Year 年:区间1970-2099,代表具体年份,但是一般不用,可以直接不写。

常用示例:
0/5 * * * * ? 每隔5秒执行一次
0 */1 * * * ? 每隔1分钟执行一次
0 0 23 * * ? 每天23点执行一次
0 0 1 * * ? 每天凌晨1点执行一次
0 0 1 1 * ? 每月1号凌晨1点执行一次
0 0 23 L * ? 每月最后一天23点执行一次
0 0 1 ? * L 每周星期天凌晨1点实行一次
0 26,29,33 * * * ? 在26分、29分、33分执行一次
0 0 0,13,18,21 * * ? 每天的0点、13点、18点、21点都执行一次
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 12 ? * WED 表示每个星期三中午12点
“0 0 12 * * ?” 每天中午12点触发
“0 15 10 ? * *” 每天上午10:15触发
“0 15 10 * * ?” 每天上午10:15触发
“0 15 10 * * ? *” 每天上午10:15触发
“0 15 10 * * ? 2005” 2005年的每天上午10:15触发
“0 * 14 * * ?” 在每天下午2点到下午2:59期间的每1分钟触发
“0 0/5 14 * * ?” 在每天下午2点到下午2:55期间的每5分钟触发
“0 0/5 14,18 * * ?” 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
“0 0-5 14 * * ?” 在每天下午2点到下午2:05期间的每1分钟触发
“0 10,44 14 ? 3 WED” 每年三月的星期三的下午2:10和2:44触发
“0 15 10 ? * MON-FRI” 周一至周五的上午10:15触发
“0 15 10 15 * ?” 每月15日上午10:15触发
“0 15 10 L * ?” 每月最后一日的上午10:15触发
“0 15 10 ? * 6L” 每月的最后一个星期五上午10:15触发
“0 15 10 ? * 6L 2002-2005” 2002年至2005年的每月的最后一个星期五上午10:15触发
“0 15 10 ? * 6#3” 每月的第三个星期五上午10:15触发
"0 0 12 * * ? " 每天12点运行
“0 15 10 * * ?” 每天10:15运行
“0 15 10 * * ? 2011” 2011年的每天10:15运行
“0 * 14 * * ?” 每天14点到15点之间每分钟运行一次,开始于14:00,结束于14:59。
“0 0/5 14 * * ?” 每天14点到15点每5分钟运行一次,开始于14:00,结束于14:55。
“0 0/5 14,18 * * ?” 每天14点到15点每5分钟运行一次,此外每天18点到19点每5钟也运行一次。
“0 0-5 14 * * ?” 每天14:00点到14:05,每分钟运行一次。
“0 10,44 14 ? 3 WED” 3月每周三的14:10分到14:44,每分钟运行一次。
“0 15 10 ? * MON-FRI” 每周一,二,三,四,五的10:15分运行。
“0 15 10 15 * ?” 每月15日10:15分运行。
“0 15 10 L * ?” 每月最后一天10:15分运行。
“0 15 10 ? * 6L” 每月最后一个星期五10:15分运行。
“0 15 10 ? * 6L 2007-2009” 在2007,2008,2009年每个月的最后一个星期五的10:15分运行。
“0 15 10 ? * 6#3” 每月第三个星期五的10:15分运行
 

2、 zone:时区,接收一个java.util.TimeZone#ID。cron表达式会基于该时区解析。默认是一个空字符串,即取服务器所在地的时区。比如我们一般使用的时区Asia/Shanghai。该字段我们一般留空。

3、 fixedDelay:上一次执行完毕时间点之后多长时间再执行。如:fixedDelay = 5000 表示上一次执行完毕时间点之后5秒再执行

4、fixedDelayString与 3. fixedDelay 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。如:

@Scheduled(fixedDelayString = "5000") //上一次执行完毕时间点之后5秒再执行
占位符的使用(配置文件中有配置:time.fixedDelay=5000):

@Scheduled(fixedDelayString = "${time.fixedDelay}")
public void testFixedDelayString() {
System.out.println("Execute at " + System.currentTimeMillis());
}

5、fixedRate:上一次开始执行时间点之后多长时间再执行。如:fixedRate = 5000 //上一次开始执行时间点之后5秒再执行

6、fixedRateString 与 5. fixedRate 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。

7、initialDelay 第一次延迟多长时间后再执行。如:

@Scheduled(initialDelay=1000, fixedRate=5000) //第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次
8、initialDelayString 与 8. initialDelayString 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。
 

以上内容输出学习使用,仅供参考!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/823668.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue基础-列表渲染v-for

列表渲染v-for基本使用 ◼ v-for的基本格式是 "item in 数组":数组通常是来自data或者prop,也可以是其他方式;item是我们给每项元素起的一个别名,这个别名可以自定来定义; ◼ 我们知道,在遍历一个数组的时候会经常需要拿到数组的索引:如果我们需要索引,…

为什么Linux一定需要虚拟内存

Linux之所以需要虚拟内存,是为了提供更大的地址空间和更好的内存管理。虚拟内存允许Linux将物理内存和硬盘空间结合起来,以满足运行程序的需求。同时,虚拟内存还实现了内存的保护和隔离,提高了系统的稳定性和安全性。Linux作为一个现代的操作系统也需要虚拟内存来提供更好的…

linux-账号管理与ACL权限设置

一.用户概述 1.Linux用户有以下三类,每一个用户都有一个数值,称为UID。2.Linux用户相关文件A.passwd文件介绍 (1)/etc/passwd 文件每一行都表示的是一个用户的信息;一行有7个段位;每个段位用:号分割。(2)每一段的解释: 账号名称 :密码 : UID : GID : 个人资料 : …

产品-权限设计

1、功能权限设计2、数据权限设计

Educational Codeforces Round 171 (Rated for Div. 2)题解记录

比赛链接:https://codeforces.com/contest/2026 A. Perpendicular Segments题目说了必定有答案,直接对角线即可 #include<iostream> #include<queue> #include<map> #include<set> #include<vector> #include<algorithm> #include<de…

BUUCTF相册

BUUCTF相册 定位函数 根据题目提示:邮箱 全局搜索mail 然后找到一个sendMailByJavaMail方法在这里定义了一个C2静态类,保存了发送邮件的一些常量 跟进c2这里发现mailform未初始化,而在下面用base64解码初始化了mailform 而这个使用了loadlibrary函数,加载了core.so文件中的…

烽火光猫不要超密不改桥接的前提下关闭 ipv6 防火墙

背景众所周知,运营商给的光猫默认都是带 ipv6 的防火墙的,会导致所有默认的入站流量都被丢弃; 网上能找到的关闭 ipv6 防火墙的方法,主要有两种:获取超级管理员权限,然后在光猫后台中关闭 ipv6 防火墙; 光猫改桥接,由路由器拨号,然后在路由器中关闭防火墙。然而,这两…

敏捷开发工具有哪些

# 敏捷开发工具有哪些 在当今快速变化的软件开发环境中,敏捷开发工具成为了推动项目高效运行的关键。这些工具主要包括:JIRA、Trello、Asana、Scrumwise和Sprintly。其中,JIRA因其强大的功能和灵活性而受到广泛的青睐,特别是在任务跟踪、问题管理以及报告方面的能力。通过使…

陈志侠第二次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc这个作业的目标 编写实现命令行计数统计文本程序姓名-学号 陈志侠 2022329301009码云地址 https://gitee.com/chen-zhixia666/second-assignment一、项目简介及其相关的用法 1.1项目简介 本项目旨在利用PyCharm实…

windows平台有哪些好用的屏幕取词翻译工具

windows平台好用的屏幕取词翻译工具:1. 深度翻译(DeepL);2. 划词翻译(Capture2Text);3. 谷歌翻译(Google Translate);4. 考拉翻译(有道词典);5. 欧路词典(eudic);6. 轻译(QTranslate)。深度翻译是一款强大的翻译工具,不仅支持文本翻译,还能通过屏幕取词实现…

在C语言中进行网络编程时,有哪些辅助工具可用

标题:在C语言中进行网络编程时,有哪些辅助工具可用? 在C语言中进行网络编程时,可用的辅助工具包括套接字库(如Winsock、BSD Sockets)、协议库(如OpenSSL)、网络调试工具(如Wireshark)、以及集成开发环境(如Eclipse、Visual Studio)。这些工具为开发者提供了强大的支…

Go语言能否替代php做互联网网站开发

在互联网网站开发领域,Go语言具备了替代PHP的潜力。Go语言(也称为Golang)被设计为一种静态类型、编译语言,其出色的并发处理能力、简洁的语法、以及高效的性能表现,使其在开发大规模分布式系统时表现卓越。而PHP作为一种动态类型的解释语言,在网页脚本开发领域占据着重要…