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中使用定时任务相关推荐

  1. spring boot注释_Spring Boot中的@SpringBootConfiguration注释

    spring boot注释 Spring Boot中的 @SpringBootConfiguration注释是一个类级别的注释,它指示此类提供了应用程序配置. 通常,具有main()方法的类最适合此注 ...

  2. 使用Spring Security在Spring Boot中进行缓存

    在这篇文章中,我想分享一下O&B的一个团队的经验教训. 他们正在使用带有Spring Security的Spring Boot. 默认情况下,Spring Security保护的所有内容都将通 ...

  3. Spring Boot Web应用程序中注册 Servlet 的方法实例

    Spring Boot Web应用程序中注册 Servlet 的方法实例 本文实例工程源代码:https://github.com/KotlinSpringBoot/demo1_add_servlet ...

  4. Spring Boot(四)-- 中的application.properties配置简介 2

      根据上文的介绍,我们已经对Spring Boot中的application.properties配置有了一定的了解,下面我们对此进行最后的介绍.   紧接上文的讲解,如下: 普通属性的注入   由 ...

  5. Spring Boot 引入jar 包中的 controller

    [问题] Spring Boot 引入jar 包中的 controller [解决] 默认情况下 Spring Boot 在启动时, 只会扫描启动类对应的包以及子包进行装配, 因此jar包中的cont ...

  6. Spring Sercurity在Spring Boot 中的使用

    Spring Security 简介 Spring 是非常流行和成功的 Java 应用开发框架,Spring Security正是Spring家族中的成员.Spring Security 基于 Spr ...

  7. boot定时任务开启和关闭 spring_SpringBoot中的定时任务的同步与异步你确定真的知道?...

    定时任务调度功能在我们的开发中是非常常见的,随便举几个例子:定时清除一些过期的数据,定时发送邮件等等,实现定时任务调度的方式也十分多样,本篇文章主要学习各种实现定时任务调度方式的优缺点,以便为日后选择 ...

  8. Spring、Spring MVC、Spring boot、Spring Cloud面试题(史上最全面试题,精心整理100家互联网企业,面试必过)

    最全面试题,精心整理100家互联网企业面经,祝你面试成功.面试必过(2023优化版)已发布在个人微信公众号[面向Offer学编程],优化版首先修正了读者反馈的部分答案存在的错误,同时根据最新面试总结, ...

  9. spring boot整合spring security笔记

    最近自己做了一个小项目,正在进行springboot和spring Security的整合,有一丢丢的感悟,在这里分享一下: 首先,spring boot整合spring security最好是使用T ...

最新文章

  1. 工业互联网 — Overview
  2. 图像分割之(三)从Graph Cut到Grab Cut
  3. Asp.Net Core EndPoint 终结点路由工作原理解读
  4. C#LeetCode刷题之#110-平衡二叉树(Balanced Binary Tree)
  5. 修路方案(次小生成树)
  6. Linux——系统引导流程学习简单笔记
  7. HDU1235 统计同成绩学生人数【水题+序列处理】
  8. Slideshow Maker for mac(幻灯片制作软件)
  9. 阿里面试官必问21 个刁钻的HashMap 面试题,这次让你彻底搞懂
  10. 在ubuntu下配置C和C++的编译环境
  11. java 线程安全 Lock
  12. Item 22: 当使用Pimpl机制时,在实现文件中给出特殊成员函数的实现
  13. maven实战之我见一(maven初识)
  14. VUE ---- 自定义指令的理解和应用
  15. 计算机硬盘分区知识简介、Linux企业级分区方案建议
  16. IDEA中Terminal窗口中无法使用maven命令
  17. excel迷你图 vba_如何在Excel 2010中使用迷你图
  18. 极限存在准则,两个重要极限
  19. 自己动手制作植物大战僵尸简单修改器
  20. struts2 国际化 中文乱码英文不乱码问题

热门文章

  1. 无法启动SQL Server 2005中的SQL Server(MSSQLSERVER)服务--zt
  2. 05-03 docker 常用命令
  3. 女生适合当程序员吗?
  4. java开发入行真功夫pdf_Java开发入行真功夫
  5. 以太坊PHP离线交易签名生成,以太坊web3.sendRawTransaction离线签名交易
  6. 优秀linux系统设计,Linux系统下设计优秀实用程序的艺术
  7. 帝豪gl车机系统降级_何以剑指合资?帝豪GL/英朗底盘对比
  8. Java运算符及录入
  9. python 近期用到的基础知识汇总(七)
  10. pytorch 关于显存增长原因以及显存占用优化