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定时注解相关推荐

  1. Java定时注解@Scheduled的使用,fixedDelay,fixedRate,cron的使用

    Java定时注解@Scheduled的使用,fixedDelay,fixedRate,cron的使用 问题背景 参数简介 项目创建 测试结果 心得 Lyric:咸咸的汗水 问题背景 项目中经常使用定时 ...

  2. Spring Schedule定时关单快速入门

    首先讲一下Spring Schedule的一个介绍,然后是Spring Schedule的一个快速入门,这里面我们会列一个表格,然后领着大家来看一下,然后是Spring Schedule Cron的生 ...

  3. spring定时注解方式定时写到xml里面融合

    把spring注解方式的定时写到xml里面,因为定时常常修改在class里面很不方便代码如下 在xlm <beans  里面加入 xmlns:task="http://www.spri ...

  4. HUE Schedule 定时调度 - 启动时间设置问题(执行次数过多,时区问题)

    在启动Schedule 时需要设置开始时间,结束时间不用讨论,开始时间设置时尽量为当前时间 因为开始时间设置如果小于今天,比如设置为2019-01-01,定时器是每天1:29分启动,则会将日期之前的次 ...

  5. java timer schedule_Java Timer的使用,timer.schedule定时执行

    1.概览 Timer是一种定时器工具,用来在一个后台线程计划执行指定任务.它可以计划执行一个任务一次或反复多次. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务. 简单的一个 ...

  6. java timer 使用_Java Timer的使用(timer.schedule定时执行) | 学步园

    Timer是一种定时器工具,用来在一个后台线程计划执行指定任务.它可以计划执行一个任务一次或反复多次. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务. 简单的一个例程: J ...

  7. spring注解 @Scheduled(cron = 0 0 1 * * *)的使用来实现定时的执行任务

    <span style="font-size:14px;">初次接触定时类的小程序,还是走了很多的弯路,如今终于搞定了,总结如下:</span> <s ...

  8. Spring Schedule配置及初始化

    打开applicationContext,然后在现在的配置加一个标签,takst:annotaion-driven,这里的driven有好几个,我们选择这一个<task:annotation-d ...

  9. python为什么会出现无响应怎么办_python定时检测无响应进程并重启的实例代码

    总有一些程序在windows平台表现不稳定,动不动一段时间就无响应,但又不得不用,每次都是发现问题了手动重启,现在写个脚本定时检测进程是否正常,自动重启. 涉及知识点 schedule定时任务调度 o ...

最新文章

  1. 利用Flutter写一个跨平台的果核APP(4)——数据存储
  2. Linux下取代top的进程管理工具 htop
  3. POJ 2480 (约数+欧拉函数)
  4. 放大器非线性失真研究装置设计报告_走进自动化 | 本科生科技论文报告会圆满结束...
  5. 开发笔记- iOS监听某些事件的方法简单梳理
  6. Python高级运维开发2016年7月第14期隆重开课
  7. java 监听文件内容_java 监听文件内容变化
  8. 工程选择LibGdx--开发环境搭建Strut2教程-java教程
  9. 华为鸿蒙11公测版,首升鸿蒙2.0系统!华为官宣这10款机型率先公测EMUI11-互联网/电商-文章-小虾米...
  10. A Game of Thrones(104)
  11. 莫纳什大学计算机硕士专业怎么样,澳大利亚留学:莫纳什大学计算机硕士的14个专业...
  12. 升级ESX SERVER
  13. HTML基础知识笔记-01
  14. jQuery -02
  15. WPM2026 P沟道增强型MOS场效应晶体管
  16. 仿百度搜索html,仿百度搜索智能提示(纯JS实现)
  17. 区块链安全是场持久战,比特安审计与诸君共勉
  18. 基于Android的小说在线阅读器软件APP
  19. Android手机Exchange Activesync 账户设置方法
  20. 新版标准日本语初级_第十六课

热门文章

  1. Web前端开发-边框设置
  2. 骨传导耳机的几大弊端?骨传导耳机优缺点分析
  3. linux压缩文件夹怎么看进度,dd进度的查看方法
  4. Windows 内存详解(三)Windows内存管理
  5. 股票交易软件开发 股票交易系统月租短租
  6. JS_自己写的JQ插件
  7. 【历史】- 一段关于 Unix、Linux 和 Windows 的暗黑史
  8. IPhone程序发布到应用程序商店的流程
  9. pycharm-社区版启动django项目的服务
  10. 打折策略模式java_策略模式(java)