SpringBoot自带的 Schedule,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多

以下任务都是在单线程下执行的

第一步 创建SpringBoot项目

第二步 外汇返佣http://www.fx61.com/,添加@EnableScheduling开启定时任务

第三步 设置定时需要执行的任务

有两种方法设置执行时机

第一种我们就且叫他为普通方法

1.fixedRate:会为所有任务的开始执行时间编排一个表,假如fixedRate=5000,且第一次开始时间是10:00:00

任务 开始执行时间

任务1 10:00:00

任务2 10:00:05

任务3 10:00:10

任务4 10:00:15

任务5 10:00:20

当执行任务耗时小于fixedRate设置的时间时,将会按照表中的开始时间执行任务,即每隔5秒会执行一个任务:

@Component

public class TestScheduling {

private static final Logger LOG = LoggerFactory.getLogger(TestScheduling.class);

private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

@Scheduled(fixedRate=5000)

public void myTask() throws InterruptedException {

LOG.info("执行时间:{}",sdf.format(new Date()));

}

}

当执行任务耗时大于fixedRate设置的时间时,以下一张图就很清楚的表示了(图的出处)

解析一下:

fixedRate设置的也是为fixedRate=5000

第一个任务开始执行时间是0:00,耗时8秒

第二个任务本应该开始执行时间是0:05,但是第一个任务执行完时间已经是0:08,所以第二个任务在第一个任务执行完毕之后会立即执行,耗时是3s

第三个任务本应该开始执行时间是0:10,但是前两个任务执行完毕时间已经是0:11,所以第三个任务在第二个任务执行完毕之后会立即执行,耗时是6s

第四个任务,也同第二、第三个任务一样,在预计开始执行的时间(这里第四个任务预计开始执行时间是0:15),因为上一个任务还没有执行完毕,所以要等待上一个人执行完毕之后才会执行。

第五个任务预计开始执行时间是0:20,而前四个任务在0:19已经执行完毕,需要等待1秒,到达我们预计的开始执行时间(0:20)才会执行第五个任务。

2.fixedDelay

这个就比之前的fixedRate简单得多。如设置fixedRate=5000.下一个任务只需要盯着上一个任务的屁股(执行完毕的时间)就行了。上一个任务执行完毕5秒之后,下一个任务就会开始执行

@Component

public class TestScheduling {

private static final Logger LOG = LoggerFactory.getLogger(TestScheduling.class);

private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

@Scheduled(fixedDelay=5000)

public void myTask(){

LOG.info("开始执行时间:{}",sdf.format(new Date()));

try {

Thread.sleep(8000);//让任务执行的耗时时间为8秒,有利于我们的观察

} catch (InterruptedException e) {

e.printStackTrace();

}

LOG.info("执行完毕时间:{}",sdf.format(new Date()));

}

}

3.initialDelay

用于配合fixedRate和fixedDelay使用的,作用是在容器启动后经过多长时间才开始执行第一次任务。

4.扩展一下

我们先看下一下@Scheduled注解里面有什么

fixedDelayString、fixedRateString和initialDelayString不就是我们上面讲的三个加个字符串嘛,之前的三个都是long类型,这三个是String类型,顾名思义,不就是用字符串表示嘛。作用其实就是为了能在application.properties配置

@Component

public class TestScheduling {

private static final Logger LOG = LoggerFactory.getLogger(TestScheduling.class);

private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

@Scheduled(initialDelay = 5000,fixedDelayString = "${com.liang.scheduled:5000}")

public void myTask(){

LOG.info("开始执行时间:{}",sdf.format(new Date()));

try {

Thread.sleep(8000);

} catch (InterruptedException e) {

e.printStackTrace();

}

LOG.info("执行完毕时间:{}",sdf.format(new Date()));

}

}

:5000作用是防止application.properties没有配置com.liang.scheduled属性则使用默认的5000(如果没有写:5000且application.properties没有配置com.liang.scheduled属性会报异常)

执行结果:和我们预计的一样,下一次开始执行时间与上一次结束时间间隔正好是10秒。如果去掉application.properties中的com.liang.scheduled属性,则间隔时间是默认的5秒,这个自行验证。

几乎大部分的应用都会有定时执行任务的需求。使用Spring Boot的Scheduling Tasks能够提高您的开发效率。这篇文章将介绍怎么通过Spring Boot去做调度任务。

构建工程

创建一个Springboot工程,在它的程序入口加上@EnableScheduling,开启调度任务。

@SpringBootApplication

@EnableScheduling

public class SpringbootScheduledApplication {

public static void main(String[] args) {

SpringApplication.run(SpringbootScheduledApplication.class, args);

}

}

创建定时任务

创建一个定时任务,每过2s在控制台打印当前时间。

@Component

public class ScheduledTasks {

private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);

private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

@Scheduled(fixedRate = 2000)

public void reportCurrentTime() {

log.info("The time is : " + dateFormat.format(new Date()));

}

}

SpringBoot中使用Scheduling执行定时任务的更多相关文章

  1. 定时任务-----Springboot中使用Scheduled做定时任务----http://www.cnblogs.com/lirenqing/p/6596557.html

    Springboot中使用Scheduled做定时任务---http://www.cnblogs.com/lirenqing/p/6596557.html 已经验证的方案: pom文件加入依赖 < ...

  2. SpringBoot中使用@Scheduled创建定时任务

    SpringBoot中使用@Scheduled创建定时任务 定时任务一般会在很多项目中都会用到,我们往往会间隔性的的去完成某些特定任务来减少服务器和数据库的压力.比较常见的就是金融服务系统推送回调,一 ...

  3. SpringBoot中使用task实现定时任务

    定时任务实现的几种方式: Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程序按照某一个频度执行, ...

  4. AspNet MVC中使用Hangfire执行定时任务

    Hangfire在Aspnet中执行定时任务: 第一步: NuGet中加入Hangfire包 第二步: 添加Owin的自启动 第三步.Hangfire的后台控制仪表盘默认情况下只能本地访问,外网访问需 ...

  5. MVC中使用Hangfire执行定时任务

    需求描述 项目中有一个通知公告的功能,在后台管理员添加公告后需要推送消息给所有注册用户,让其查看消息.消息推送移动端采用极光推送,但是消息在何时发送是个问题,比如说有一个重要的会议通知,可能希望在会议 ...

  6. SpringBoot中Async异步方法和定时任务介绍

    1.功能说明 Spring提供了Async注解来实现方法的异步调用. 即当调用Async标识的方法时,调用线程不会等待被调用方法执行完成即返回继续执行以下操作,而被调用的方法则会启动一个独立线程来执行 ...

  7. Springboot中使用Scheduled做定时任务

    在开发中,定时任务是常见的功能,在spring boot 下开发定时任务其实很简单,具体代码如下: 1.配置依赖包pom.xml 由于默认的maven仓库经常访问不了,这里采用了阿里云的maven仓库 ...

  8. Springboot中定时任务的使用

    在springboot中已经集成了定时任务,只需要在启动类上加注解@EnableScheduling即可 例如: 添加类加上@Component注解,添加方法加上@Scheduler即可

  9. SpringBoot中执行定时任务

    一:在SpringBoot中使用定时任务相当的简单.首先,我们在启动类中加入@EnableScheduling来开启定时任务. @SpringBootApplication @EnableSchedu ...

随机推荐

  1. Codeforces 454E. Little Pony and Summer Sun Celebration

    题意:给n个点m条边的无向图,并给出每个点的访问次数奇偶,求构造一条满足条件的路径(点和边都可以走). 解法:这道题还蛮有意思的.首先我们可以发现在一棵树上每个儿子的访问次数的奇偶是可以被它的父亲控制 ...

  2. 编译错误提示PATH_MAX未声明

    解决办法: grep一下,发现PATH_MAX在limits.h中定义,在/scripts/mod/sumversion.c中添加#include <limits.h>即可. #inclu ...

  3. Spring的PropertyPlaceholderConfigurer应用(转)

    转自:http://www.cnblogs.com/yl2755/archive/2012/05/06/2486752.html Spring 利用PropertyPlaceholderConfigu ...

  4. tcp/ip的通俗讲述(转)

    源地址:https://www.runoob.com/tcpip/tcpip-tutorial.html 对于我们来说网络世界丰富多彩,对于互联网来说也就是数据根据相应的规则在跑来跑去.(这些规则就是 ...

  5. Mina---系统学习

    1.为何使用Mina? java提供的BIO.NIO使用的复杂性等原因,导致Mina框架的诞生: 2.什么时候使用Mina? 易于使用 高并发的用户量 被证明的系统: Mina已被全球数以万计的应用使 ...

  6. java中的final关键字的用法

    一. 什么是final关键字? final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变 ...

  7. robotframework+python3+selenium自动化测试环境搭建---第一集

    1.安装python3.6 1.1 可选择Customize installation自定义安装内容,记得要勾选Add to PATH(这样就不用自己配置环境变量了). 1.2 安装成功后,可以输入p ...

  8. Frost & Sullivan权威报告:阿里云再次领跑云WAF大中华区市场

    近日,国际权威分析机构Frost & Sullivan 针对Web应用防火墙(简称“WAF”)领域发布了<2017年亚太区Web应用防火墙市场报告>,阿里云以市场占有率45.8%的 ...

  9. 使用 windsor 实现IOC 和 AOP

    代码很简单,不多说. 对于拦截,windsor 使用动态代理的方式,即生成继承类的方式来实现的,因此无法拦截private 方法,因为无法在继承类中看见private方法. using System; ...

  10. fatal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit

    最近想用一下Xtreme ToolkitPro 界面库,安装后用VC6根据向导 产生一个工程,编译时出现如下的错误: fatal error C1076: compiler limit : inter ...