欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring 定時(shí)任務(wù)@Scheduled 注解四大參數(shù)用法解析

 更新時(shí)間:2025年01月24日 09:53:27   作者:Yeats_Liao  
本文詳細(xì)介紹了Spring框架中使用@Scheduled注解實(shí)現(xiàn)定時(shí)任務(wù)的方法,重點(diǎn)講解了fixedRate、fixedDelay、cron和initialDelay這四個(gè)參數(shù)的用法,并通過(guò)實(shí)例代碼進(jìn)行了詳細(xì)說(shuō)明,感興趣的朋友一起看看吧

本文主要介紹了在 Spring 框架中使用@Scheduled注解實(shí)現(xiàn)定時(shí)任務(wù)的方法,重點(diǎn)講解了fixedRate、fixedDelay、cron和initialDelay這四個(gè)參數(shù)的用法,并通過(guò)實(shí)例代碼進(jìn)行了詳細(xì)說(shuō)明。

1. fixedRate 參數(shù)

參數(shù)含義

fixedRate指定任務(wù)固定時(shí)間間隔執(zhí)行。如設(shè)為 3000 毫秒(3 秒),第一次任務(wù)啟動(dòng)后,后續(xù)任務(wù)每隔 3 秒嘗試啟動(dòng),不考慮前次任務(wù)是否完成。

示例代碼

創(chuàng)建一個(gè)簡(jiǎn)單的 Spring Boot 項(xiàng)目,并在主類上添加@SpringBootApplication注解以啟用 Spring Boot 自動(dòng)配置。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling // 啟用定時(shí)任務(wù)功能
public class ScheduledDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(ScheduledDemoApplication.class, args);
    }
}

創(chuàng)建一個(gè)定時(shí)任務(wù)類,doTask方法被@Scheduled注解修飾,fixedRate設(shè)置為 3000 毫秒。在方法內(nèi)部,我們首先打印出執(zhí)行次數(shù)和當(dāng)前時(shí)間,然后通過(guò)Thread.sleep模擬任務(wù)執(zhí)行耗時(shí) 5 秒。運(yùn)行應(yīng)用程序后,你會(huì)發(fā)現(xiàn)盡管任務(wù)執(zhí)行時(shí)間超過(guò)了 3 秒,但每隔 3 秒就會(huì)有一次新的任務(wù)嘗試啟動(dòng),導(dǎo)致任務(wù)會(huì)重疊執(zhí)行。

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class FixedRateTask {
    private int count = 0;
    @Scheduled(fixedRate = 3000)
    public void doTask() {
        System.out.println("FixedRateTask - 執(zhí)行次數(shù): " + (++count) + ",當(dāng)前時(shí)間: " + System.currentTimeMillis());
        try {
            // 模擬任務(wù)執(zhí)行耗時(shí) 5 秒
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

2. fixedDelay 參數(shù)

參數(shù)含義

fixedRate不同,fixedDelay參數(shù)關(guān)注的是上一次任務(wù)執(zhí)行完成后的延遲時(shí)間。也就是說(shuō),只有當(dāng)上一次任務(wù)徹底結(jié)束后,才會(huì)開(kāi)始計(jì)算固定的延遲時(shí)間,之后才啟動(dòng)下一次任務(wù)。例如,設(shè)置fixedDelay = 3000毫秒,那么在上一次任務(wù)完成后,會(huì)等待 3 秒才開(kāi)始下一次任務(wù)。

示例代碼

創(chuàng)建一個(gè)FixedDelayTask類,doTask方法的fixedDelay設(shè)置為 3000 毫秒,任務(wù)模擬執(zhí)行耗時(shí) 2 秒。運(yùn)行后可以看到,每次任務(wù)執(zhí)行完成后,會(huì)等待 3 秒才開(kāi)始下一次任務(wù),任務(wù)不會(huì)重疊執(zhí)行。

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class FixedDelayTask {
    private int count = 0;
    @Scheduled(fixedDelay = 3000)
    public void doTask() {
        System.out.println("FixedDelayTask - 執(zhí)行次數(shù): " + (++count) + ",當(dāng)前時(shí)間: " + System.currentTimeMillis());
        try {
            // 模擬任務(wù)執(zhí)行耗時(shí) 2 秒
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

3. cron 參數(shù)

參數(shù)含義

cron參數(shù)提供了一種高度靈活的定時(shí)任務(wù)執(zhí)行時(shí)間設(shè)置方式。它基于 cron 表達(dá)式,該表達(dá)式由 6 個(gè)或 7 個(gè)字段組成,分別對(duì)應(yīng)秒、分鐘、小時(shí)、日、月、星期(星期可以用數(shù)字 0 - 6 表示,其中 0 或 7 代表星期日)以及可選的年。通過(guò)合理組合這些字段的值,可以精確地定義任務(wù)在何時(shí)執(zhí)行。

示例代碼

創(chuàng)建一個(gè)CronTask類,cron表達(dá)式"0 0/5 * * * *"表示每隔 5 分鐘執(zhí)行一次任務(wù)。例如,任務(wù)可能在 10:00:00、10:05:00、10:10:00 等時(shí)間點(diǎn)執(zhí)行。:

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class CronTask {
    @Scheduled(cron = "0 0/5 * * * *")
    public void doTask() {
        System.out.println("CronTask - 執(zhí)行時(shí)間: " + System.currentTimeMillis());
    }
}

4. initialDelay 參數(shù)

參數(shù)含義

initialDelay參數(shù)用于指定定時(shí)任務(wù)在應(yīng)用啟動(dòng)后首次執(zhí)行的延遲時(shí)間。它可以與fixedRate、fixedDelaycron等參數(shù)結(jié)合使用,以便在應(yīng)用啟動(dòng)后等待一段時(shí)間再開(kāi)始執(zhí)行定時(shí)任務(wù)。

示例代碼

創(chuàng)建一個(gè)InitialDelayTask類,、fixedRate設(shè)置為 3000 毫秒,initialDelay設(shè)置為 5000 毫秒。這意味著應(yīng)用啟動(dòng)后,會(huì)先等待 5 秒,然后才開(kāi)始按照每 3 秒的固定間隔執(zhí)行任務(wù)。

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class InitialDelayTask {
    private int count = 0;
    @Scheduled(fixedRate = 3000, initialDelay = 5000)
    public void doTask() {
        System.out.println("InitialDelayTask - 執(zhí)行次數(shù): " + (++count) + ",當(dāng)前時(shí)間: " + System.currentTimeMillis());
    }
}

5. 總結(jié)

  • 對(duì)于一些對(duì)實(shí)時(shí)性要求較高且執(zhí)行時(shí)間較短的任務(wù),可以考慮使用fixedRate;
  • 對(duì)于執(zhí)行時(shí)間較長(zhǎng)且不希望任務(wù)重疊的任務(wù),fixedDelay可能更為合適;
  • 對(duì)于需要在特定時(shí)間點(diǎn)或按照復(fù)雜時(shí)間規(guī)則執(zhí)行的任務(wù),cron表達(dá)式則是不二之選。
  • initialDelay參數(shù)可以幫助我們更好地控制任務(wù)的啟動(dòng)時(shí)間,避免在應(yīng)用啟動(dòng)初期因大量任務(wù)同時(shí)啟動(dòng)而帶來(lái)的性能壓力。

到此這篇關(guān)于Spring 定時(shí)任務(wù)@Scheduled 注解四大參數(shù)解析的文章就介紹到這了,更多相關(guān)Spring 定時(shí)任務(wù)@Scheduled 注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringMVC請(qǐng)求亂碼處理的2種方式

    SpringMVC請(qǐng)求亂碼處理的2種方式

    這篇文章主要介紹了SpringMVC請(qǐng)求亂碼處理的2種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • SpringCloud中NacosNamingService的作用詳解

    SpringCloud中NacosNamingService的作用詳解

    這篇文章主要介紹了SpringCloud中NacosNamingService的作用詳解,NacosNamingService類完成服務(wù)實(shí)例注冊(cè),撤銷與獲取服務(wù)實(shí)例操作,NacosNamingService初始化采用單例模式,使用反射生成,需要的朋友可以參考下
    2023-11-11
  • Java指令重排引發(fā)問(wèn)題及解決方案

    Java指令重排引發(fā)問(wèn)題及解決方案

    指令重排是JVM在解釋執(zhí)行Java代碼時(shí)對(duì)指令順序進(jìn)行重新排列的一種優(yōu)化技術(shù),本文主要介紹了Java指令重排引發(fā)問(wèn)題及解決方案,感興趣的可以了解一下
    2023-08-08
  • Java?BigDecimal正確用法詳解

    Java?BigDecimal正確用法詳解

    Java在java.math包中提供的API類BigDecimal,用來(lái)對(duì)超過(guò)16位有效位的數(shù)進(jìn)行精確的運(yùn)算。雙精度浮點(diǎn)型變量double可以處理16位有效數(shù),但在實(shí)際應(yīng)用中,可能需要對(duì)更大或者更小的數(shù)進(jìn)行運(yùn)算和處理
    2022-10-10
  • 簡(jiǎn)單分析Java的求值策略原理

    簡(jiǎn)單分析Java的求值策略原理

    在本篇文章里小編給大家整理的是一篇關(guān)于簡(jiǎn)單分析Java的求值策略原理內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2021-06-06
  • 詳解Spring @Autowired 注入小技巧

    詳解Spring @Autowired 注入小技巧

    這篇文章主要介紹了詳解Spring @Autowired 注入小技巧,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 分布式難題ElasticSearch解決大數(shù)據(jù)量檢索面試

    分布式難題ElasticSearch解決大數(shù)據(jù)量檢索面試

    這篇文章主要為大家介紹了分布式面試難題,ElasticSearch解決大數(shù)據(jù)量檢索的問(wèn)題分析回答,讓面試官無(wú)話可說(shuō),幫助大家實(shí)現(xiàn)面試開(kāi)薪自由
    2022-03-03
  • java分布式流式處理組件Producer分區(qū)理論

    java分布式流式處理組件Producer分區(qū)理論

    這篇文章主要為大家介紹了java分布式流式處理組件Producer分區(qū)理論詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Java中Thread.join()的使用方法

    Java中Thread.join()的使用方法

    這篇文章主要介紹了Java中Thread.join()的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 關(guān)于Spring配置文件加載方式變化引發(fā)的異常詳解

    關(guān)于Spring配置文件加載方式變化引發(fā)的異常詳解

    這篇文章主要給大家介紹了關(guān)于Spring配置文件加載方式變化引發(fā)的異常的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-01-01

最新評(píng)論