Spring Boot:在Spring Boot中使用定时任务
2019独角兽企业重金招聘Python工程师标准>>>
本文主要介绍如何在Spring Boot中使用定时任务,假设你已经建好了一个基础的Spring Boot项目。首先,我们在项目中建立一个定时任务。
1.创建定时任务
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTasks {private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); //@Scheduled(cron = "0 */1 * * * * ")//每1分钟执行一次@Scheduled(fixedRate = 5000)//每5秒钟执行一次public void reportCurrentTime() {System.out.println("The time is now " + dateFormat.format(new Date()));}
}
@Scheduled 注解用于标注这个方法是一个定时任务的方法,方法的执行周期是fixedRate,本例中是每隔5秒钟运行一次,我们也可以使用更灵活的设置方法 @Scheduled(cron="...") ,用一个表达式来设置定时任务
2.启用定时任务
接下来,我们在Application中设置启用定时任务功能。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class Application {public static void main(String[] args) throws Exception {SpringApplication.run(Application.class);}
}
其中 @EnableScheduling 注解的作用是发现注解@Scheduled的任务并后台执行。
运行Spring Boot,输出结果为如下,每5秒钟打印出当前时间。
The time is now 13:10:00
The time is now 13:10:05
The time is now 13:10:10
The time is now 13:10:15
3.介绍一个cronExpression表达式。
字段 | 允许值 | 允许的特殊字符 | ||
---|---|---|---|---|
秒
|
0-59
|
, - * /
|
||
分
|
0-59
|
, - * /
|
||
小时
|
0-23
|
, - * /
|
||
日期
|
1-31
|
, - * / L W C
|
||
月份
|
1-12 或者 JAN-DEC
|
, - * /
|
||
星期
|
1-7 或者 SUN-SAT
|
, - * / L C #
|
||
年(可选)
|
留空, 1970-2099
|
, - * /
|
如上面的表达式所示:
“*”字符被用来指定所有的值。如:”*“在分钟的字段域里表示“每分钟”。
“-”字符被用来指定一个范围。如:“10-12”在小时域意味着“10点、11点、12点”。
“,”字符被用来指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”.
“?”字符只在日期域和星期域中使用。它被用来指定“非明确的值”。当你需要通过在这两个域中的一个来指定一些东西的时候,它是有用的。看下面的例子你就会明白。
“L” 字符指定在月或者星期中的某天(最后一天)。即“Last ”的缩写。但是在星期和月中“L”表示不同的意思,如:在月子段中“L”指月份的最后一天-1月31日,2月28日,如果在星期字段中则简单的表示为 “7”或者“SAT”。如果在星期字段中在某个value值得后面,则表示“某月的最后一个星期value”,如“6L”表示某月的最后一个星期五。
“W”字符只能用在月份字段中,该字段指定了离指定日期最近的那个星期日。
“#”字符只能用在星期字段,该字段指定了第几个星期value在某月中
每 一个元素都可以显式地规定一个值(如6),一个区间(如9-12),一个列表(如9,11,13)或一个通配符(如*)。“月份中的日期”和“星期中的日 期”这两个元素是互斥的,因此应该通过设置一个问号(?)来表明你不想设置的那个字段。表7.1中显示了一些cron表达式的例子和它们的意义:
表达式 |
意义 | |
---|---|---|
"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触发
|
每天早上6点 0 6 * * *
每两个小时 0 */2 * * *
晚上11点到早上8点之间每两个小时,早上八点 0 23-7/2,8 * * *
每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 0 11 4 * 1-3
1月1日早上4点 0 4 1 1 *
转载于:https://my.oschina.net/milu6852/blog/729929
Spring Boot:在Spring Boot中使用定时任务相关推荐
- spring boot注释_Spring Boot中的@SpringBootConfiguration注释
spring boot注释 Spring Boot中的 @SpringBootConfiguration注释是一个类级别的注释,它指示此类提供了应用程序配置. 通常,具有main()方法的类最适合此注 ...
- 使用Spring Security在Spring Boot中进行缓存
在这篇文章中,我想分享一下O&B的一个团队的经验教训. 他们正在使用带有Spring Security的Spring Boot. 默认情况下,Spring Security保护的所有内容都将通 ...
- Spring Boot Web应用程序中注册 Servlet 的方法实例
Spring Boot Web应用程序中注册 Servlet 的方法实例 本文实例工程源代码:https://github.com/KotlinSpringBoot/demo1_add_servlet ...
- Spring Boot(四)-- 中的application.properties配置简介 2
根据上文的介绍,我们已经对Spring Boot中的application.properties配置有了一定的了解,下面我们对此进行最后的介绍. 紧接上文的讲解,如下: 普通属性的注入 由 ...
- Spring Boot 引入jar 包中的 controller
[问题] Spring Boot 引入jar 包中的 controller [解决] 默认情况下 Spring Boot 在启动时, 只会扫描启动类对应的包以及子包进行装配, 因此jar包中的cont ...
- Spring Sercurity在Spring Boot 中的使用
Spring Security 简介 Spring 是非常流行和成功的 Java 应用开发框架,Spring Security正是Spring家族中的成员.Spring Security 基于 Spr ...
- boot定时任务开启和关闭 spring_SpringBoot中的定时任务的同步与异步你确定真的知道?...
定时任务调度功能在我们的开发中是非常常见的,随便举几个例子:定时清除一些过期的数据,定时发送邮件等等,实现定时任务调度的方式也十分多样,本篇文章主要学习各种实现定时任务调度方式的优缺点,以便为日后选择 ...
- Spring、Spring MVC、Spring boot、Spring Cloud面试题(史上最全面试题,精心整理100家互联网企业,面试必过)
最全面试题,精心整理100家互联网企业面经,祝你面试成功.面试必过(2023优化版)已发布在个人微信公众号[面向Offer学编程],优化版首先修正了读者反馈的部分答案存在的错误,同时根据最新面试总结, ...
- spring boot整合spring security笔记
最近自己做了一个小项目,正在进行springboot和spring Security的整合,有一丢丢的感悟,在这里分享一下: 首先,spring boot整合spring security最好是使用T ...
最新文章
- 工业互联网 — Overview
- 图像分割之(三)从Graph Cut到Grab Cut
- Asp.Net Core EndPoint 终结点路由工作原理解读
- C#LeetCode刷题之#110-平衡二叉树(Balanced Binary Tree)
- 修路方案(次小生成树)
- Linux——系统引导流程学习简单笔记
- HDU1235 统计同成绩学生人数【水题+序列处理】
- Slideshow Maker for mac(幻灯片制作软件)
- 阿里面试官必问21 个刁钻的HashMap 面试题,这次让你彻底搞懂
- 在ubuntu下配置C和C++的编译环境
- java 线程安全 Lock
- Item 22: 当使用Pimpl机制时,在实现文件中给出特殊成员函数的实现
- maven实战之我见一(maven初识)
- VUE ---- 自定义指令的理解和应用
- 计算机硬盘分区知识简介、Linux企业级分区方案建议
- IDEA中Terminal窗口中无法使用maven命令
- excel迷你图 vba_如何在Excel 2010中使用迷你图
- 极限存在准则,两个重要极限
- 自己动手制作植物大战僵尸简单修改器
- struts2 国际化 中文乱码英文不乱码问题
热门文章
- 无法启动SQL Server 2005中的SQL Server(MSSQLSERVER)服务--zt
- 05-03 docker 常用命令
- 女生适合当程序员吗?
- java开发入行真功夫pdf_Java开发入行真功夫
- 以太坊PHP离线交易签名生成,以太坊web3.sendRawTransaction离线签名交易
- 优秀linux系统设计,Linux系统下设计优秀实用程序的艺术
- 帝豪gl车机系统降级_何以剑指合资?帝豪GL/英朗底盘对比
- Java运算符及录入
- python 近期用到的基础知识汇总(七)
- pytorch 关于显存增长原因以及显存占用优化