文章提出

在写一个从接口中读取实时数据然后存到自己数据库的小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的定时任务的方法周期比方法的运行时间长相关推荐

  1. java quartz管理,SpringBoot中使用Quartz管理定时任务的方法

    定时任务在系统中用到的地方很多,例如每晚凌晨的数据备份,每小时获取第三方平台的 Token 信息等等,之前我们都是在项目中规定这个定时任务什么时候启动,到时间了便会自己启动,那么我们想要停止这个定时任 ...

  2. springboot之定时任务

    定时线程 说到定时任务,通常会想到JDK自带的定时线程来执行,定时任务. 回顾一下定时线程池. public static ScheduledExecutorService newScheduledT ...

  3. springboot多线程定时任务

    我们经常会遇到定时任务,在某个特定的时间点,程序会自主触发去执行一些机械重复的工作,这样就可以将人力与精力彻底的解放出来了. 在最近的工作中,先是在后台报表工程中用到了springboot自带的定时器 ...

  4. SpringBoot整合定时任务和Emil发送

    SpringBoot整合定时任务和Emil发送 定时任务 ​ 任务系统指的是定时任务.定时任务是企业级开发中必不可少的组成部分,诸如长周期业务数据的计算,例如年度报表,诸如系统脏数据的处理,再比如系统 ...

  5. SpringBoot | :定时任务的使用

    前言 上一章我们简单的讲解了关于异步请求相关知识点.这一章节,我们来讲讲开发过程也是经常会碰见的定时任务.比如每天定时清理无效数据.定时发送短信.定时发送邮件.支付系统中的定时对账等等,往往都会定义一 ...

  6. SpringBoot 实战定时任务 Scheduled

    序言 使用SpringBoot创建定时任务非常简单,目前主要有以下三种创建方式: 一.基于注解(@Scheduled) 二.基于接口(SchedulingConfigurer) 前者相信大家都很熟悉, ...

  7. 一篇文章搞定,SpringBoot 创建定时任务

    作者:yizhiwazi 链接:https://www.jianshu.com/p/d160f2536de7 序言:创建定时任务非常简单,主要有两种创建方式: 一.基于注解(@Scheduled) 二 ...

  8. SpringBoot中定时任务与异步定时任务的实现

    场景 若依前后端分离版手把手教你本地搭建环境并运行项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662 在上面 ...

  9. springboot配置定时任务及常用的cron表达式

    springboot引入定时任务 springboot引入定时任务主要需要以下几步: 1.引入相关的依赖 2.配置程序开启定时任务 3. 编写定时任务 引入相关的依赖 只用引一个基础的web的依赖就可 ...

最新文章

  1. DQL、DML、DDL、DCL的概念
  2. 跟小静学CLR via C#(12)-委托Delegate
  3. 面试字节跳动,我被怼了……
  4. MOCTF-Web-PHP黑魔法
  5. Gradle:我们需要另一个构建工具吗?
  6. python如何计算个人gpa_【Python】计算GPA | 学步园
  7. python怎么训练模型_GPU如何训练大批量模型?方法在这里
  8. vim python一键执行、高亮等一键安装
  9. 发光二极管工作电流分析
  10. 副业真没想你的这么容易做!
  11. 国家级赛事正式开赛 | 2019数字中国创新大赛上线
  12. docker 命令详解(二十四):push
  13. oracle rac节点重启,oracle RAC一个节点频繁重启解决
  14. 辐射76 服务器位置,《辐射76》确认没有NPC 但将开放私人服务器与MOD
  15. springboot集成配置swaggerUI
  16. SFTP获取文件夹内的文件名,文件大小,文件修改时间
  17. oracle无法scott登陆,解决oracle用户scott无法登录问题,解锁即可
  18. zabbix监控域名到期时间
  19. 微信小程序下拉选择框
  20. 锁相环PLL --原理浅析

热门文章

  1. SSL基础:18:使用-newkey同时生成私钥和CSR文件
  2. 计算机的图形图像文件格式,常见图形图像文件格式.ppt
  3. win 10计算机文件,教你win10电脑怎么打开ai文件
  4. Java新浪微博客户端开发第二步
  5. 万能五笔6.5绿色美化版试用手记
  6. 数据可视化之美——《纽约时报》的一天
  7. 程序员35岁真的会失业?我,36岁,揭开北京“码农”的真实状况
  8. 2111-课前资料及授课说明
  9. 常用GIT命令整理 - WIP
  10. Delphi ActionList详解