SpringBoot定时任务主要由两个注解完成。

@Scheduled加在方法上面。

@EnableScheduling加在类上面。可以是Application类,也可以是@Component类,还可以是@Controller类等。

如下:

  1. @SpringBootApplication
  2. @EnableScheduling
  3. public class Application {
  4. public static void main(String[] args) {
  5. SpringApplication.run(Application.class, args);
  6. }
  7. }

如果@EnableScheduling不想加在Application上方,也可以如下:

  1. @Component
  2. @EnableScheduling
  3. public class ScheduledTasks {
  4. private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
  5. @Scheduled(fixedRate = 5000)
  6. public void reportCurrentTime() {
  7. System.out.println("现在时间:" + dateFormat.format(new Date()));
  8. }
  9. }

@Scheduled用法如下:

  1. @Scheduled(fixedRate = 5000) :上一次开始执行时间点之后5秒再执行
  2. @Scheduled(fixedDelay = 5000) :上一次执行完毕时间点之后5秒再执行
  3. @Scheduled(initialDelay=1000, fixedRate=5000) :第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次
  4. @Scheduled(cron="0 */1 * * * ? ") :通过cron表达式定义规则,表示每隔1分钟执行一次

cron表达式的用法如下:

cron表达式依次表示 [秒] [分] [小时] [日] [月] [周] [年]

常见的Cron示例如下:

  1. */5 * * * * ? 表示每隔5秒执行一次
  2. 0 */1 * * * ? 表示每隔1分钟执行一次
  3. 0 15 10 ? * MON-FRI 表示在每个周一,二, 三和周四的 10:15 AM
  4. 0 15 10 10 * ? 表示每月10号的 10:15 AM
  5. 0 15 10 L * ? 每月最后一天的 10:15 AM
  6. 0 10 10 ? * 6L 每月最后一个周五的 10:10 AM
  7. 0 10 10 ? * 6L 2014-2017 2014, 2015, 2016, 2017 年中的每月最后一个周五的 10:10 AM
  8. 0 15 10 ? * 6#3 每月第三个周五的 10:15 AM
  9. 0 0 12 1/5 * ? 每月从第一天算起每五天的 12:00 PM (中午)
  10. 0 11 11 11 11 ? 每一个 11 11 号的 11:11 AM
  11. 0 10,44 14 ? 3 WED 三月份每个周三的 2:10 PM 2:44 PM

其中,表达式中的特殊符号的意义是:

  1. “*” 代表这个时间单位的整个时间段.比如 *放在秒上面,就是指任意秒,*放在分上面就是任意分。
  2. “?”字符:表示不确定的值(注意:? 号只能用在日和周域上,但是不能在这两个域上同时使用。假如你为这两域的其中一个指定了值,那就必须在另一个字值上放一个 ?,如:0 0 0 * * ?)
  3. “,”字符:指定数个值
  4. “-”字符:指定一个值的范围
  5. “/”字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m
  6. L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X
  7. W”字符:指定离给定日期最近的工作日(周一到周五)
  8. “#”字符:表示该月第几个周X5#2表示该月第2个周四(每周的第一天是从周日开始的,即:周日的值为:1)

参考资料:

http://blog.didispace.com/springbootscheduled/

SpringBoot定时任务@Scheduled的更多相关文章

  1. SpringBoot学习笔记(七):SpringBoot使用AOP统一处理请求日志、SpringBoot定时任务@Scheduled、SpringBoot异步调用Async、自定义参数

    SpringBoot使用AOP统一处理请求日志 这里就提到了我们Spring当中的AOP,也就是面向切面编程,今天我们使用AOP去对我们的所有请求进行一个统一处理.首先在pom.xml中引入我们需要的 ...

  2. 【使用篇二】SpringBoot定时任务Scheduled(14)

    在日常项目运行中,我们总会有需求在某一时间段周期性的执行某个动作.比如每天在某个时间段导出报表,或者每隔多久统计一次现在在线的用户量.在springboot中可以有很多方案去帮我们完成定时器的工作,有 ...

  3. Springboot定时任务@Scheduled注解形式,参数详解

    参数详解 1.占位符 1 秒 是 0-59 , - * / 2 分 是 0-59 , - * / 3 时 是 0-23 , - * / 4 日 是 1-31 , - * ? / L W 5 月 是 1 ...

  4. spring boot 学习(八)定时任务 @Scheduled

    SpringBoot 定时任务 @Scheduled 前言 有时候,我们有这样的需求,需要在每天的某个固定时间或者每隔一段时间让应用去执行某一个任务.一般情况下,可以使用多线程来实现这个功能:在 Sp ...

  5. SpringBoot学习18:springboot使用Scheduled 定时任务器

    Scheduled 定时任务器:是 Spring3.0 以后自带的一个定时任务器. 1.在pom.xml文件中添加Scheduled依赖 <!-- 添加spring定时任务 Scheduled ...

  6. springboot 基于@Scheduled注解 实现定时任务

    前言 使用SpringBoot创建定时任务非常简单,目前主要有以下三种创建方式: 一.基于注解(@Scheduled) 二.基于接口(SchedulingConfigurer) 前者相信大家都很熟悉, ...

  7. SpringBoot执行定时任务@Scheduled

    SpringBoot执行定时任务@Scheduled 在做项目时,需要一个定时任务来接收数据存入数据库,后端再写一个接口来提供该该数据的最新的那一条. 数据保持最新:设计字段sign的值(0,1)来设 ...

  8. 玩转SpringBoot之定时任务@Scheduled线程池配置

    序言 对于定时任务,在SpringBoot中只需要使用@Scheduled 这个注解就能够满足需求,它的出现也给我们带了很大的方便,我们只要加上该注解,并且根据需求设置好就可以使用定时任务了. 但是, ...

  9. Spring boot(三) springboot 定时任务

    这个不多说,springboot 定时任务非常简单就可以实现了. 30s运行一次 , @Scheduled(cron="0,30 * * * * ?") 通过这个控制定时时间 cr ...

随机推荐

  1. Jmeter学习笔记(二十三)——生成HTML性能报告

    有时候我们写性能报告的时候需要一些性能分布图,JMeter是可以生成HTML性能报告的.这篇博客,简单介绍下在利用jmeter进行性能测试时,是如何生成HTML的可视化测试报告的 一.准备工作 1:j ...

  2. Celery:Next Steps

    参考文档:http://docs.celeryproject.org/en/latest/getting-started/next-steps.html#next-steps

  3. docker容器监控:cadvisor+influxdb+grafana

    cadvisor+influxdb+grafana可以实现容器信息获取.存储.显示等容器监控功能,是目前流行的docker监控开源方案. 方案介绍 cadvisor Google开源的用于监控基础设施 ...

  4. ireport(1.2.7)的IllegalAccessError异常

    IllegalAccessError异常: Exception in thread "main" java.lang.IllegalAccessError: tried to ac ...

  5. OpenStack共享组件-RabbitMQ消息队列

    1. MQ 全称为 Message Queue, 消息队列( MQ ),是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们. 消息 ...

  6. jquery获取元素的display属性是不是none?

    1.代码: $(".max_find_wl_info").click(function(){ if($('.max_wuliu').css('display') === 'none ...

  7. Hibernate中Java对象的生命周期

    一个对象的出生源于我们的一个new操作,当我们使用new语句创建一个对象,这个对象的生命周期就开始了,当我们不在有任何引用变量引用它,这个对象就的生命就此结束,它占用的内存就可以被JVM的垃圾回收器回 ...

  8. Python 字符串正则处理实例

    #coding:utf-8 ''' Created on 2017��9��6�� @author: li.liu ''' from selenium import webdriver from se ...

  9. YII2 使用curl请求,返回false

    一. 起因: 今天用yii框架,请求java接口,始终返回false. 二. 分析历程: 使用curl_error()方法打印出Peer’s Certificate issuer is not rec ...

  10. hive中执行hql或建表语句时,抛出Display all 459 possibilities? (y or n)错误的解决方法

    我昨天在hive上建表,一直报Display all 459 possibilities? (y or n) ,之前我以为是建表语句有问题,一直在改语句,后来在网上搜这个错误,原来语句里混杂了Tab缩 ...