springboot的定时任务的方法周期比方法的运行时间长
文章提出
在写一个从接口中读取实时数据然后存到自己数据库的小demo时候,发现数据从某一天到现在的都停止了。
先说一下上面读数据存数据的简单逻辑:定时任务从redis中读取上次读取到的时间点timeA,然后从timeA每次加1小时访问接口读取这一小段的代码,然后发现某一小时timeB没数据,把这个时间timeB存到redis中,到下次定时任务的时候在调用。
我的操作就是找到最早没有读到的时间点,然后修改redis中的时间点,启动定时任务就好了。
but 因为间隔的时间比较长,所以任务方法执行的时间超过了定时任务的周期,那么问题来了???
比如我定时任务是每一小时执行一次,我方法执行了1.5个小时。项目从1点启动,1点开始执行定时任务,那么2点的时候任务还没有执行完毕,那么任务是否又开启一个???
代码实操
测试代码1
@Component
public class TaskComponent {/*** 任务周期是2秒* 任务执行时间是3秒*/@Scheduled(cron = "0/2 * * * * ? ")//每2秒执行一次public void sendMessage() {System.out.println("定时任务开始执行: " + LocalDateTime.now());try {TimeUnit.SECONDS.sleep(3);System.out.println("(业务逻辑)发送消息: " + LocalDateTime.now());} catch (Exception e) {e.printStackTrace();}}}
@SpringBootApplication
@EnableScheduling
public class ScheduleDemoApplication {public static void main(String[] args) {SpringApplication.run(ScheduleDemoApplication.class, args);}
}
测试代码2
@Component
public class TaskComponent {/*** 任务周期是2秒* 任务执行时间是3秒*/@Scheduled(cron = "0/2 * * * * ? ")//每2秒执行一次@Asyncpublic void sendMessage() {System.out.println("定时任务开始执行: " + LocalDateTime.now());try {TimeUnit.SECONDS.sleep(3);System.out.println("(业务逻辑)发送消息: " + LocalDateTime.now());} catch (Exception e) {e.printStackTrace();}}}
@SpringBootApplication
@EnableScheduling
@EnableAsync
public class ScheduleDemoApplication {public static void main(String[] args) {SpringApplication.run(ScheduleDemoApplication.class, args);}
}
结论
1)如测试代码1,默认情况下,当定时任务的周期小于方法的执行时间时,定时任务会跳过方法还没有执行完毕的那次(比如我规定1小时执行一次,但是任务的执行时间是1.5小时。当前时间为0点,开始执行定时任务,但是当到1点时候又该执行定时任务了,但是该定时任务还没有执行完,所以跳过。下次执行就是2点的时候了)
2)如测试代码2,如果要实现无论任务是否执行完,都开启新任务的需求,@EnableAsync @Async
springboot的定时任务的方法周期比方法的运行时间长相关推荐
- java quartz管理,SpringBoot中使用Quartz管理定时任务的方法
定时任务在系统中用到的地方很多,例如每晚凌晨的数据备份,每小时获取第三方平台的 Token 信息等等,之前我们都是在项目中规定这个定时任务什么时候启动,到时间了便会自己启动,那么我们想要停止这个定时任 ...
- springboot之定时任务
定时线程 说到定时任务,通常会想到JDK自带的定时线程来执行,定时任务. 回顾一下定时线程池. public static ScheduledExecutorService newScheduledT ...
- springboot多线程定时任务
我们经常会遇到定时任务,在某个特定的时间点,程序会自主触发去执行一些机械重复的工作,这样就可以将人力与精力彻底的解放出来了. 在最近的工作中,先是在后台报表工程中用到了springboot自带的定时器 ...
- SpringBoot整合定时任务和Emil发送
SpringBoot整合定时任务和Emil发送 定时任务 任务系统指的是定时任务.定时任务是企业级开发中必不可少的组成部分,诸如长周期业务数据的计算,例如年度报表,诸如系统脏数据的处理,再比如系统 ...
- SpringBoot | :定时任务的使用
前言 上一章我们简单的讲解了关于异步请求相关知识点.这一章节,我们来讲讲开发过程也是经常会碰见的定时任务.比如每天定时清理无效数据.定时发送短信.定时发送邮件.支付系统中的定时对账等等,往往都会定义一 ...
- SpringBoot 实战定时任务 Scheduled
序言 使用SpringBoot创建定时任务非常简单,目前主要有以下三种创建方式: 一.基于注解(@Scheduled) 二.基于接口(SchedulingConfigurer) 前者相信大家都很熟悉, ...
- 一篇文章搞定,SpringBoot 创建定时任务
作者:yizhiwazi 链接:https://www.jianshu.com/p/d160f2536de7 序言:创建定时任务非常简单,主要有两种创建方式: 一.基于注解(@Scheduled) 二 ...
- SpringBoot中定时任务与异步定时任务的实现
场景 若依前后端分离版手把手教你本地搭建环境并运行项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662 在上面 ...
- springboot配置定时任务及常用的cron表达式
springboot引入定时任务 springboot引入定时任务主要需要以下几步: 1.引入相关的依赖 2.配置程序开启定时任务 3. 编写定时任务 引入相关的依赖 只用引一个基础的web的依赖就可 ...
最新文章
- DQL、DML、DDL、DCL的概念
- 跟小静学CLR via C#(12)-委托Delegate
- 面试字节跳动,我被怼了……
- MOCTF-Web-PHP黑魔法
- Gradle:我们需要另一个构建工具吗?
- python如何计算个人gpa_【Python】计算GPA | 学步园
- python怎么训练模型_GPU如何训练大批量模型?方法在这里
- vim python一键执行、高亮等一键安装
- 发光二极管工作电流分析
- 副业真没想你的这么容易做!
- 国家级赛事正式开赛 | 2019数字中国创新大赛上线
- docker 命令详解(二十四):push
- oracle rac节点重启,oracle RAC一个节点频繁重启解决
- 辐射76 服务器位置,《辐射76》确认没有NPC 但将开放私人服务器与MOD
- springboot集成配置swaggerUI
- SFTP获取文件夹内的文件名,文件大小,文件修改时间
- oracle无法scott登陆,解决oracle用户scott无法登录问题,解锁即可
- zabbix监控域名到期时间
- 微信小程序下拉选择框
- 锁相环PLL --原理浅析