SpringBoot中使用Scheduling执行定时任务
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执行定时任务的更多相关文章
- 定时任务-----Springboot中使用Scheduled做定时任务----http://www.cnblogs.com/lirenqing/p/6596557.html
Springboot中使用Scheduled做定时任务---http://www.cnblogs.com/lirenqing/p/6596557.html 已经验证的方案: pom文件加入依赖 < ...
- SpringBoot中使用@Scheduled创建定时任务
SpringBoot中使用@Scheduled创建定时任务 定时任务一般会在很多项目中都会用到,我们往往会间隔性的的去完成某些特定任务来减少服务器和数据库的压力.比较常见的就是金融服务系统推送回调,一 ...
- SpringBoot中使用task实现定时任务
定时任务实现的几种方式: Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程序按照某一个频度执行, ...
- AspNet MVC中使用Hangfire执行定时任务
Hangfire在Aspnet中执行定时任务: 第一步: NuGet中加入Hangfire包 第二步: 添加Owin的自启动 第三步.Hangfire的后台控制仪表盘默认情况下只能本地访问,外网访问需 ...
- MVC中使用Hangfire执行定时任务
需求描述 项目中有一个通知公告的功能,在后台管理员添加公告后需要推送消息给所有注册用户,让其查看消息.消息推送移动端采用极光推送,但是消息在何时发送是个问题,比如说有一个重要的会议通知,可能希望在会议 ...
- SpringBoot中Async异步方法和定时任务介绍
1.功能说明 Spring提供了Async注解来实现方法的异步调用. 即当调用Async标识的方法时,调用线程不会等待被调用方法执行完成即返回继续执行以下操作,而被调用的方法则会启动一个独立线程来执行 ...
- Springboot中使用Scheduled做定时任务
在开发中,定时任务是常见的功能,在spring boot 下开发定时任务其实很简单,具体代码如下: 1.配置依赖包pom.xml 由于默认的maven仓库经常访问不了,这里采用了阿里云的maven仓库 ...
- Springboot中定时任务的使用
在springboot中已经集成了定时任务,只需要在启动类上加注解@EnableScheduling即可 例如: 添加类加上@Component注解,添加方法加上@Scheduler即可
- SpringBoot中执行定时任务
一:在SpringBoot中使用定时任务相当的简单.首先,我们在启动类中加入@EnableScheduling来开启定时任务. @SpringBootApplication @EnableSchedu ...
随机推荐
- iptables 防火墙(上)
iptables 防火墙(上) 1. 防火墙概述 1.1 概念与作用 网络中的防火墙是一种将内部网络和外部网络分开的方法,是一种隔离技术.防火墙在内网与外网通信时进行访问控制,依据所设置的规则对数据包 ...
- 再也不用字符串拼接dom元素了
<script type="text/html" id="tmp"> <div class="cla"> <u ...
- 使用SOAPui 笔记
对接Oracle Fusion Application的SOAP. 遇到 <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soa ...
- 项目实战 - 混合式App开发
为何要使用混合式开发? 要说为什么使用Hybrid App [混合式开发],就要先了解什么是Native App[原生程序], Web App[网站程序]. Native App 是专门针对某一类移动 ...
- 发光LED压降与工作电流总结
一.常用的普通贴片0603LED 红色的压降为1.82-1.88V,电流5-8mA 绿色的压降为1.75-1.82V,电流3-5mA 橙色的压降为1.7-1.8V,电流3-5mA 兰色的压降为3.1- ...
- Vue学习笔记【21】——Vue中的动画(v-for 的列表过渡)
定义过渡样式: <style> .list-enter, .list-leave-to { opacity: 0; transform: translat ...
- 2-Harris角点检测
1. 何为角点? 下面有两幅不同视角的图像,通过找出对应的角点进行匹配. 再看下图所示,放大图像的两处角点区域: 我们可以直观的概括下角点所具有的特征: >轮廓之间的交点: >对于同一场景 ...
- word文档操作
1.如何把word文档修改的地方标记出来 : https://zhidao.baidu.com/question/73648149.html 2.word 的几种 视图:https://zhid ...
- Android Runnable 运行在那个线程
Runnable 并不一定是新开一个线程,比如下面的调用方法就是运行在UI主线程中的: Handler mHandler=new Handler(); mHandler.post(new Runnab ...
- 搜索引擎优化 TF_IDF之Java实现
实现之前,我们要事先说明一些问题: 我们用Redis对数据进行持久化,存两种形式的MAP: key值为term,value值为含有该term的urlkey值为url,value值为map,记录term ...