深入剖析fixedDelay定时任务

一、fixedDelay单位

fixedDelay是Spring Boot框架提供的一种基于时间间隔的定时任务处理方式。它支持多种时间单位来指定时间间隔,比如秒,分钟,小时等等。在配置时需要使用字符串类型来指定时间,比如”10s”表示每10秒执行一次定时任务。

常见的时间单位及其对应的代码如下:

TimeUnit.SECONDS          // 秒
TimeUnit.MINUTES          // 分钟
TimeUnit.HOURS            // 小时
TimeUnit.DAYS             // 天

需要注意的是,在使用这些单位时,我们需要在字符串中加上单位后缀,例如1分钟为”1m”。

二、fixedDelay和fixedRate

fixedDelay和fixedRate都可以用于实现定时任务,它们之间的主要区别在于任务执行的方式。

fixedDelay表示每次任务执行完成后,等待一段时间后再次执行。因此,如果任务执行时间较长,fixedDelay能保证任务之间的时间间隔是固定的。

fixedRate表示每隔一定时间执行一次任务。如果任务执行时间较长,可能会导致多次执行任务产生重叠。因此,如果定时任务的间隔时间比较小,可以考虑使用fixedRate。

三、fixedDelay失效

在某些情况下,fixedDelay可能会失效,任务不再按照指定的时间间隔执行。

一种情况是如果上一次任务执行时间过长,下一次任务的执行时间可能会和前一次任务的结束时间出现重叠,这样下一次任务将被跳过执行。

另一种情况是如果任务执行过程中触发了并发操作,执行时间可能被延长,从而导致下一次任务的执行时间被推迟。这也可能会导致fixedDelay失效。

四、fixedDelay不支持毫秒

fixedDelay不支持毫秒级别的定时任务。如果需要实现毫秒级别的定时任务,可以使用其他方式,比如使用ScheduledThreadPoolExecutor线程池。

五、fixedDelay毫秒还是秒

fixedDelay默认的单位是毫秒,因此在配置时间间隔时可以直接指定毫秒数。如果需要使用其他单位,例如1分钟,可以在数字后面紧跟时间单位,例如”1m”。

六、fixedDelay 值可以配置吗

fixedDelay的值可以通过配置文件来指定,例如:

spring.task.scheduling.fixed-delay=5000

该配置表示每隔5秒执行一次定时任务。

七、fixedDelay bug

在某些情况下,fixedDelay任务可能会存在一些bug。例如,在使用fixedDelay时,如果任务执行过程中出现异常,可能会导致该任务后续不再执行。此外,如果应用程序重启,在任务执行时间间隔内可能会存在”遗漏”的任务。

代码示例

Spring Boot程序的示例代码如下:

package com.example.demo;

import java.util.Date;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class DemoTask {

    @Scheduled(fixedDelay = 5000)   // 每隔5秒执行一次
    public void demoTask() {
        System.out.println("当前时间:" + new Date());
    }

}

以上示例中定义了一个名为DemoTask的Bean,并使用@Scheduled注解指定了定时任务执行的时间间隔为5秒。在任务被触发时,会执行其中定义的方法,并输出当前时间。

原创文章,作者:XDVZ,如若转载,请注明出处:https://www.506064.com/n/132146.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
XDVZXDVZ
上一篇 2024-10-03 23:50
下一篇 2024-10-03 23:50

相关推荐

  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29
  • Saturn 定时任务用法介绍

    本文将从以下几个方面对Saturn定时任务进行详细的阐述: 一、Saturn 定时任务简介 Saturn是一个分布式任务调度系统,支持在线添加、修改定时任务,支持多种任务类型,如J…

    编程 2025-04-29
  • 如何在dolphinscheduler中运行chunjun任务实例

    本文将从多个方面对dolphinscheduler运行chunjun任务实例进行详细的阐述,包括准备工作、chunjun任务配置、运行结果等方面。 一、准备工作 在运行chunju…

    编程 2025-04-28
  • dotask——高效易用的任务执行框架

    一、任务执行框架介绍 在一个复杂的系统中,通常存在大量的任务需要执行。这些任务包括但不限于:发送邮件、处理数据、调用服务、生成报表等。在传统的编程模式中,我们往往需要手动编写任务调…

    编程 2025-04-25
  • 深入解析Vue3 defineExpose

    Vue 3在开发过程中引入了新的API `defineExpose`。在以前的版本中,我们经常使用 `$attrs` 和` $listeners` 实现父组件与子组件之间的通信,但…

    编程 2025-04-25
  • 深入理解byte转int

    一、字节与比特 在讨论byte转int之前,我们需要了解字节和比特的概念。字节是计算机存储单位的一种,通常表示8个比特(bit),即1字节=8比特。比特是计算机中最小的数据单位,是…

    编程 2025-04-25
  • 深入理解Flutter StreamBuilder

    一、什么是Flutter StreamBuilder? Flutter StreamBuilder是Flutter框架中的一个内置小部件,它可以监测数据流(Stream)中数据的变…

    编程 2025-04-25
  • 深入探讨OpenCV版本

    OpenCV是一个用于计算机视觉应用程序的开源库。它是由英特尔公司创建的,现已由Willow Garage管理。OpenCV旨在提供一个易于使用的计算机视觉和机器学习基础架构,以实…

    编程 2025-04-25
  • 深入了解scala-maven-plugin

    一、简介 Scala-maven-plugin 是一个创造和管理 Scala 项目的maven插件,它可以自动生成基本项目结构、依赖配置、Scala文件等。使用它可以使我们专注于代…

    编程 2025-04-25
  • 深入了解LaTeX的脚注(latexfootnote)

    一、基本介绍 LaTeX作为一种排版软件,具有各种各样的功能,其中脚注(footnote)是一个十分重要的功能之一。在LaTeX中,脚注是用命令latexfootnote来实现的。…

    编程 2025-04-25

发表回复

登录后才能评论