一、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