深入剖析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/zh-hk/n/132146.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
XDVZ的頭像XDVZ
上一篇 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

發表回復

登錄後才能評論