@schedule定时注解
spring中使用定时任务,基本上就是quartz和@schedule注解,前者小编用的较少,好像略烦在分布式中引用广泛,单机引用还是后者比较好用,并且现在似乎已经成了大家在spring环境中定时任务的首选。
废话不多说,下面我们来讲一下@schedule注解
cron,应用简单,直接使用cron表达式。0/5 * * * * ?
但是他有一个问题,比如一个任务5秒执行一次,那么在实际执行业务的时候花了9秒,那么任务结束以后下一次执行时间将会是(10-9),这里就有大神会问了,为什么会这样?我一开始也很迷惑,但是后来仔细研究发现这个表达式就是在一分钟内能被5整除的秒数都会执行。那么在系统启动以后就开始用当前秒进行整除,正好能整除5那么执行,那第一次执行比如是5秒,那么第二个能被整除的就是10,但是业务执行时间为9秒,那么自然第二次执行时间就是(10-9);
所以业务执行时间小于任务触发时间,基本不受影响,但是大于这个时间,那下一次执行时间就本不是设置的这个时间去触发了。
fixedRate,配置的参数值是毫秒5*1000
他也有一个问题,就是当业务执行时间大于任务触发时间,那么当业务执行完就会触发下一次执行。
fixedDelay,配置的也是毫秒
他的执行时间就很标准,不管业务执行了多长时间,下一次执行始终是业务执行完以后的 任务触发毫秒数。
本人只是罗列出schedule任务的三个参数做出的任务触发情况,每一个参数肯定也有属于自己的业务场景。并不代表他不好。
以上讲完了各个参数的区别,那么还有一个问题在实际业务场景中也会遇到,就是任务异步执行。
举个例子,系统中有两个任务,一个5秒(A),一个6秒(B);
如果不使用异步,所有定时任务使用一个线程进行任务执行;
A的业务执行8秒,线程保持阻塞,B在6秒的时候不会执行,他会等到A业务执行完以后才会执行。
所以我们需要对每一个任务创建一个线程,方法如下:
@Bean
public TaskScheduler taskScheduler(){ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();taskScheduler .setPoolSize(2);//定义线程池数量为2 个return taskScheduler ;}
把这个方法添加到任务执行类或者系统模块中即可,有多少定时任务,则配置多少个线程即可。
@schedule定时注解相关推荐
- Java定时注解@Scheduled的使用,fixedDelay,fixedRate,cron的使用
Java定时注解@Scheduled的使用,fixedDelay,fixedRate,cron的使用 问题背景 参数简介 项目创建 测试结果 心得 Lyric:咸咸的汗水 问题背景 项目中经常使用定时 ...
- Spring Schedule定时关单快速入门
首先讲一下Spring Schedule的一个介绍,然后是Spring Schedule的一个快速入门,这里面我们会列一个表格,然后领着大家来看一下,然后是Spring Schedule Cron的生 ...
- spring定时注解方式定时写到xml里面融合
把spring注解方式的定时写到xml里面,因为定时常常修改在class里面很不方便代码如下 在xlm <beans 里面加入 xmlns:task="http://www.spri ...
- HUE Schedule 定时调度 - 启动时间设置问题(执行次数过多,时区问题)
在启动Schedule 时需要设置开始时间,结束时间不用讨论,开始时间设置时尽量为当前时间 因为开始时间设置如果小于今天,比如设置为2019-01-01,定时器是每天1:29分启动,则会将日期之前的次 ...
- java timer schedule_Java Timer的使用,timer.schedule定时执行
1.概览 Timer是一种定时器工具,用来在一个后台线程计划执行指定任务.它可以计划执行一个任务一次或反复多次. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务. 简单的一个 ...
- java timer 使用_Java Timer的使用(timer.schedule定时执行) | 学步园
Timer是一种定时器工具,用来在一个后台线程计划执行指定任务.它可以计划执行一个任务一次或反复多次. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务. 简单的一个例程: J ...
- spring注解 @Scheduled(cron = 0 0 1 * * *)的使用来实现定时的执行任务
<span style="font-size:14px;">初次接触定时类的小程序,还是走了很多的弯路,如今终于搞定了,总结如下:</span> <s ...
- Spring Schedule配置及初始化
打开applicationContext,然后在现在的配置加一个标签,takst:annotaion-driven,这里的driven有好几个,我们选择这一个<task:annotation-d ...
- python为什么会出现无响应怎么办_python定时检测无响应进程并重启的实例代码
总有一些程序在windows平台表现不稳定,动不动一段时间就无响应,但又不得不用,每次都是发现问题了手动重启,现在写个脚本定时检测进程是否正常,自动重启. 涉及知识点 schedule定时任务调度 o ...
最新文章
- 利用Flutter写一个跨平台的果核APP(4)——数据存储
- Linux下取代top的进程管理工具 htop
- POJ 2480 (约数+欧拉函数)
- 放大器非线性失真研究装置设计报告_走进自动化 | 本科生科技论文报告会圆满结束...
- 开发笔记- iOS监听某些事件的方法简单梳理
- Python高级运维开发2016年7月第14期隆重开课
- java 监听文件内容_java 监听文件内容变化
- 工程选择LibGdx--开发环境搭建Strut2教程-java教程
- 华为鸿蒙11公测版,首升鸿蒙2.0系统!华为官宣这10款机型率先公测EMUI11-互联网/电商-文章-小虾米...
- A Game of Thrones(104)
- 莫纳什大学计算机硕士专业怎么样,澳大利亚留学:莫纳什大学计算机硕士的14个专业...
- 升级ESX SERVER
- HTML基础知识笔记-01
- jQuery -02
- WPM2026 P沟道增强型MOS场效应晶体管
- 仿百度搜索html,仿百度搜索智能提示(纯JS实现)
- 区块链安全是场持久战,比特安审计与诸君共勉
- 基于Android的小说在线阅读器软件APP
- Android手机Exchange Activesync 账户设置方法
- 新版标准日本语初级_第十六课