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

Springboot實現(xiàn)定時任務的4種方式舉例詳解

 更新時間:2024年01月15日 10:11:04   作者:紅色的羽毛.  
在我們開發(fā)項目過程中經(jīng)常需要定時任務來幫助我們來做一些內(nèi)容,下面這篇文章主要給大家介紹了關于Springboot實現(xiàn)定時任務的4種方式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

一. 使用@Scheduled注解

@Component
public class MyScheduledTask {
    
    //每天凌晨0點0分0秒時觸發(fā)執(zhí)行
    @Scheduled(cron = "0 0 0 * * ?") 
    public void Timing() {
        // 執(zhí)行定時任務業(yè)務邏輯
    }
}

解釋:

  • @Component注解是Spring框架中被用于聲明一個Bean的注解, 被該注解修飾的類將被Spring自動掃描到, 并注冊為一個Bean, 該注解通常與其他注解(如@Service,@Repository,@Controller)一起使用,用于將類標記為特定類型的組件。
  • @Scheduled注解用于指定方法或者類的某個方法為定時任務, 它可以使用cron表達式或者固定的時延來定義任務的執(zhí)行時間。
  • cron表達式是一種用于定義定時任務執(zhí)行時間的字符串格式, 它包含六個或七個部分, 分別表示秒, 分, 小時, 日期, 月份, 星期和年份(可選)用空格將這些部分 分隔開,具體每個部分的取值范圍和特殊符號含義請參考cron表達式的相關文檔。
  • "0 0 0 * * ?"是一個cron表達式的例子,它表示每天的凌晨0點0分0秒觸發(fā)任務執(zhí)行。
  • 所以當將@Component和@Scheduled注解一起使用時, 被@Component注解修飾的類將會被Spring識別為一個組件, 并包含一個定時任務方法, 該方法將在每天凌晨0點0分0秒時觸發(fā)執(zhí)行。

二. 使用SchedulingConfigurer接口

@Configuration
@EnableScheduling
public class MyScheduledTask implements SchedulingConfigurer {

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.addCronTask(() -> {
            // 執(zhí)行任務邏輯
        }, "0 0 0 * * ?");
    }
}

解釋:

  • 通過實現(xiàn)SchedulingConfigurer接口,重寫configureTasks方法,可以配置多個定時任務,并指定其執(zhí)行時間。

  • 在Spring Boot中,我們需要創(chuàng)建一個類,并使用@Configuration注解進行標注。然后,我們需要實現(xiàn)SchedulingConfigurer接口, 并實現(xiàn)其中的configureTasks方法, 在configureTasks方法中, 我們可以使用ScheduledTaskRegistrar對象來添加一個或多個定時任務,并指定其執(zhí)行時間。

  • 讓我們逐一解釋各個部分的作用:
    (1) @Configuration注解:這是一個Spring框架的注解,用于標注配置類。通過將一個類標記為@Configuration,Spring會將其識別為一個配置類,并在運行時加載這個類中定義的Bean定義和組件。

    (2) @EnableScheduling注解:這是一個Spring框架的注解,用于在Spring應用程序中啟用定時任務功能。通過在配置類上添加@EnableScheduling注解,Spring會自動檢測標記有@Scheduled注解的方法,并在指定時間觸發(fā)這些方法的執(zhí)行。

    (3) SchedulingConfigurer接口:這是Spring框架提供的一個接口,用于配置定時任務。通過實現(xiàn)該接口,并重寫其中的configureTasks方法,我們可以在應用程序的啟動過程中,自定義配置定時任務的執(zhí)行時間和邏輯。

    (4) configureTasks方法:這是SchedulingConfigurer接口中的一個方法,用于配置定時任務。通過使用參數(shù)類型為ScheduledTaskRegistrar的ScheduledTaskRegistrar對象,我們可以在該方法中添加定時任務并設置其執(zhí)行時間。

  • 在configureTasks方法中, ScheduledTaskRegistrar對象提供了一系列的方法用于配置定時任務:
    (1) addCronTask:添加一個基于cron表達式的定時任務。
    (1) addFixedDelayTask:添加一個固定延遲時間的定時任務。
    (1) addFixedRateTask:添加一個固定速率的定時任務。
    (1) addTriggerTask:添加一個基于Trigger的定時任務。

三. 使用@EnableScheduling注解和@Scheduled注解結合

@Configuration
@EnableScheduling
public class MyScheduledTask {

    @Scheduled(cron = "0 0 0 * * ?") // 每天凌晨執(zhí)行
    public void executeTask() {
        // 執(zhí)行任務邏輯
    }
}

解釋:

  • 使用@EnableScheduling注解和@Scheduled注解結合, 在配置類上添加@EnableScheduling注解,表示啟用定時任務功能,在需要執(zhí)行定時任務的方法上添加@Scheduled注解,定義任務的執(zhí)行時間。
  • 關于@Configuration @EnableScheduling @Scheduled(cron = “0 0 0 * * ?”)上面有介紹。

四. 使用@Async注解和ThreadPoolTaskScheduler實現(xiàn)定時任務的異步執(zhí)行

@Configuration
@EnableAsync
public class MyScheduledTask {
    @Async
    @Scheduled(cron = "0 0 0 * * ?") // 每天凌晨執(zhí)行
    public void executeTask() {
        // 執(zhí)行任務邏輯
    }
    @Bean
    public ThreadPoolTaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setPoolSize(10);
        return scheduler;
    }
}

解釋:

  • 使用@Async注解和ThreadPoolTaskScheduler, 通過在定時任務方法上添加@Async注解,同時配合使用ThreadPoolTaskScheduler來配置線程池,實現(xiàn)定時任務的異步執(zhí)行。
  • 在這種方式中,我們首先需要在配置類上添加@EnableAsync注解,用于啟用異步任務的功能。
  • 然后,我們需要在定時任務方法上添加@Async注解,表示該方法是一個異步任務。
  • @Async注解告訴Spring,在調用該方法時應該創(chuàng)建一個新的線程來執(zhí)行該方法,并立即返回。
  • 為了配置線程池以供異步任務使用,我們需要在配置類中創(chuàng)建一個名為taskScheduler的ThreadPoolTaskScheduler的Bean,并進行相應的配置。ThreadPoolTaskScheduler是Spring提供的一個線程池調度器,用于執(zhí)行異步任務。

拓展:@Scheduled的參數(shù)

(1):cron:

[秒] [分] [小時] [日] [月] [周] [年]
@Scheduled(cron = "*/5 * * * * ?")
public void test(){}

每隔5秒執(zhí)行一次:*/5 * * * * ?

每隔1分鐘執(zhí)行一次:0 */1 * * * ?

每天23點執(zhí)行一次:0 0 23 * * ?

每天凌晨1點執(zhí)行一次:0 0 1 * * ?

每月1號凌晨1點執(zhí)行一次:0 0 1 1 * ?

每月最后一天23點執(zhí)行一次:0 0 23 L * ?

每周星期六凌晨1點實行一次:0 0 1 ? * L

在26分、29分、33分執(zhí)行一次:0 26,29,33 * * * ?

每天的0點、13點、18點、21點都執(zhí)行一次:0 0 0,13,18,21 * * ?

  • *:表示所有值。 例如:在分的字段上設置 *,表示每一分鐘都會觸發(fā)。
  • ?:表示不指定值。使用的場景為不需要關心當前設置這個字段的值。例如:要在每月的10號觸發(fā)一個操作,但不關心是周幾,所以需要周位置的那個字段設置為”?” 具體設置為 0 0 0 10 * ?
  • -:表示區(qū)間。例如 在小時上設置 “10-12”,表示 10,11,12點都會觸發(fā)。
  • ,: 表示指定多個值,例如在周字段上設置 “MON,WED,FRI” 表示周一,周三和周五觸發(fā)
  • /:用于遞增觸發(fā)。如在秒上面設置”5/15” 表示從5秒開始,每增15秒觸發(fā)(5,20,35,50)。 在月字段上設置’1/3’所示每月1號開始,每隔三天觸發(fā)一次。

通配符說明可以去查詢相關資料

cron還支持占位符:

@Scheduled(cron = "${time.cron}")
public void test(){}

(2) fixedDelay:上一次執(zhí)行完畢時間點之后多長時間再執(zhí)行。

@Scheduled(fixedDelay = 5000) //上一次執(zhí)行完畢時間點之后5秒再執(zhí)行
public void test(){}

(3) fixedDelayString:與 fixedDelay 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。

@Scheduled(fixedDelayString = "5000") //上一次執(zhí)行完畢時間點之后5秒再執(zhí)行
public void test(){}
@Scheduled(fixedDelayString = "${time.fixedDelayString}") //上一次執(zhí)行完畢時間點之后5秒再執(zhí)行
public void test(){}

(4) fixedRate:上一次開始執(zhí)行時間點之后多長時間再執(zhí)行。

@Scheduled(fixedRate = 5000) //上一次開始執(zhí)行時間點之后5秒再執(zhí)行
public void test(){}

(5) fixedRateString:與 fixedRate 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。

@Scheduled(fixedRateString = "${time.fixedRateString}") //上一次開始執(zhí)行時間點之后5秒再執(zhí)行
public void test(){}

(6) initialDelay:第一次延遲多長時間后再執(zhí)行。

@Scheduled(initialDelay = 1000, fixedRate = 5000) //第一次延遲1秒后執(zhí)行,之后按fixedRate的規(guī)則每5秒執(zhí)行一次
public void test(){}

(6) initialDelayString:與 initialDelay 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。

@Scheduled(initialDelayString = "${time.initialDelayString}", fixedRate = 5000) //第一次延遲1秒后執(zhí)行,之后按fixedRate的規(guī)則每5秒執(zhí)行一次
public void test(){}

總結 

到此這篇關于Springboot實現(xiàn)定時任務的4種方式的文章就介紹到這了,更多相關Springboot實現(xiàn)定時任務內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Cookie在Java中的使用

    Cookie在Java中的使用

    Cookie又稱“小甜餅”,類型為“小型文本文件”,指某些網(wǎng)站為了辨別用戶身份而儲存在用戶本地終端(Client Side)上的數(shù)據(jù)(通常經(jīng)過加密)。由用戶客戶端計算機暫時或永久保存的信息。本文將講解Cookie在Java中的使用,感興趣的朋友可以了解下
    2021-05-05
  • JavaWeb使用Session和Cookie實現(xiàn)登錄認證

    JavaWeb使用Session和Cookie實現(xiàn)登錄認證

    本篇文章主要介紹了JavaWeb使用Session和Cookie實現(xiàn)登錄認證,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • java中的匿名內(nèi)部類詳細總結

    java中的匿名內(nèi)部類詳細總結

    以下是對java中的匿名內(nèi)部類進行了詳細的總結介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • Spring中的refreshContext源碼分析

    Spring中的refreshContext源碼分析

    這篇文章主要介紹了Spring中的refreshContext源碼分析,在SpringBoot啟動流程中,主要的兩個階段是初始化SpringApplication對象以及SpringApplication.run方法執(zhí)行的內(nèi)容,今天主要細講的是SpringApplication.run中的刷新容器refreshContext方法,需要的朋友可以參考下
    2023-12-12
  • Android Home鍵監(jiān)聽的實現(xiàn)代碼

    Android Home鍵監(jiān)聽的實現(xiàn)代碼

    這篇文章主要介紹了Android Home 鍵監(jiān)聽的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • SpringBoot中服務消費的實現(xiàn)

    SpringBoot中服務消費的實現(xiàn)

    本文主要介紹了SpringBoot中服務消費的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Idea?編譯并運行?Spark?3.1.1?源碼的方法

    Idea?編譯并運行?Spark?3.1.1?源碼的方法

    這篇文章主要介紹了Idea?編譯并運行?Spark?3.1.1源碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-11-11
  • Java中的線程安全集合CopyOnWriteArrayList解析

    Java中的線程安全集合CopyOnWriteArrayList解析

    這篇文章主要介紹了Java中的線程安全CopyOnWriteArrayList解析,CopyOnWriteArrayList是ArrayList的線程安全版本,從他的名字可以推測,CopyOnWriteArrayList是在有寫操作的時候會copy一份數(shù)據(jù),然后寫完再設置成新的數(shù)據(jù),需要的朋友可以參考下
    2023-12-12
  • java中struts 框架的實現(xiàn)

    java中struts 框架的實現(xiàn)

    本文給大家介紹的是java中struts 框架的實現(xiàn),有需要的小伙伴可以參考下。
    2015-06-06
  • 解析SpringBoot?搭建基于?MinIO?的高性能存儲服務的問題

    解析SpringBoot?搭建基于?MinIO?的高性能存儲服務的問題

    Minio是Apache?License?v2.0下發(fā)布的對象存儲服務器,使用MinIO構建用于機器學習,分析和應用程序數(shù)據(jù)工作負載的高性能基礎架構。這篇文章主要介紹了SpringBoot?搭建基于?MinIO?的高性能存儲服務,需要的朋友可以參考下
    2022-03-03

最新評論