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

分布式調(diào)度器之Spring Task 的使用詳解

 更新時(shí)間:2024年10月23日 10:28:43   作者:哈嘍哈嘍哈嘍~  
SpringTask是Spring框架中用于任務(wù)調(diào)度的組件,通過(guò)簡(jiǎn)單的注解就能實(shí)現(xiàn)定時(shí)任務(wù)的創(chuàng)建和調(diào)度,可以通過(guò)配置線程池來(lái)實(shí)現(xiàn),本文給大家介紹分布式調(diào)度器之Spring Task 的使用,感興趣的朋友跟隨小編一起看看吧

Spring Task是 Spring 框架的一個(gè)組件,它為任務(wù)調(diào)度提供了支持,使開(kāi)發(fā)者能 創(chuàng)建后臺(tái)任務(wù) 定期執(zhí)行任務(wù)

1、啟動(dòng)類(App.java)上加@EnableScheduling注解: 開(kāi)啟基于注解的任務(wù)調(diào)度器

默認(rèn)情況下,系統(tǒng)會(huì)自動(dòng)啟動(dòng)一個(gè)線程,調(diào)度執(zhí)行項(xiàng)目中定義的所有定時(shí)任務(wù)

這個(gè)注解 是SpringBoot內(nèi)置的 不需要依賴任何的starter包

2、同步定時(shí)任務(wù)

需要在定時(shí)執(zhí)行的方法上 添加@Scheduled注解

定時(shí)執(zhí)行的方法不能有參數(shù),并且一般沒(méi)有返回值

定時(shí)任務(wù)所在的類要作為 Spring Bean,在類上添加@Component注解即可,即:定時(shí)方法所在的類,要放到IOC容器里面

注意:使用@Scheduled注解形式的定時(shí)任務(wù),默認(rèn)是單線程來(lái)執(zhí)行項(xiàng)目中所有的定時(shí)任務(wù)。

即使如果同一時(shí)刻有兩個(gè)定時(shí)任務(wù)需要執(zhí)行,那么只能其中一個(gè)定時(shí)任務(wù)完成之后再執(zhí)行下一個(gè)定時(shí)任務(wù)。

如果項(xiàng)目只有一個(gè)定時(shí)任務(wù)還好。若定時(shí)任務(wù)增多時(shí),如果一個(gè)任務(wù)被阻塞,則會(huì)導(dǎo)致其他任務(wù)無(wú)法正常執(zhí)行。

若要改變這種行為,使得定時(shí)任務(wù)能夠并發(fā)執(zhí)行,可以配置任務(wù)調(diào)度線程池,來(lái)解決以上問(wèn)題。首先配置一個(gè)線程池

package com.***.springtask;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
@Slf4j
@EnableAsync //開(kāi)啟異步支持
@EnableScheduling //開(kāi)啟定時(shí)任務(wù)支持
public class ScheduledTask {
    int i = 1;
    //@Scheduled(fixedRate = 5000, initialDelay = 15*1000)
    public void task1(){
//        i++;
//        if(i > 5){
//            ThreadUtil.safeSleep(8*1000);
//        }
        log.debug("task1執(zhí)行了{(lán)}次,{}",i,Thread.currentThread().getId());
    }
    @Scheduled(cron = "0/5 * * * * ?")
    @Async("asyncScheduledPool")
    public void task2(){
        // ThreadUtil.safeSleep(8*1000);
        log.debug("task2執(zhí)行了,{}",Thread.currentThread().getId());
    }
}

3、多線程(異步)定時(shí)任務(wù)

3.1 配置線程池

package com.***.config;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
@Component
public class ExecutorConfig {
    //定義核心線程數(shù)
    public static final  int CORE_POOL_SIZE = 10;
    // 最大線程數(shù)
    public static final  int MAX_POOL_SIZE = 20;
    // 任務(wù)隊(duì)列容量大小
    public static final  int QUEUE_MAX_COUNT = 100;
    @Bean("asyncScheduledPool")
    public Executor asyncScheduledPool(){
        //自定義線程池
        ThreadPoolTaskExecutor threadPoolExecutor = new ThreadPoolTaskExecutor();
        //設(shè)置核心線程數(shù)
        threadPoolExecutor.setCorePoolSize(CORE_POOL_SIZE);
        //設(shè)置最大線程數(shù) : 長(zhǎng)工 +  臨時(shí)工
        threadPoolExecutor.setMaxPoolSize(MAX_POOL_SIZE);
        //設(shè)置任務(wù)隊(duì)列容量大小
        threadPoolExecutor.setQueueCapacity(QUEUE_MAX_COUNT);
        //設(shè)置線程的名稱前綴
        threadPoolExecutor.setThreadNamePrefix("myTask-");
        //設(shè)置拒絕策略
        threadPoolExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
        return  threadPoolExecutor;
    }
}

3.2 開(kāi)啟異步支持

要在 Spring Boot 應(yīng)用中啟用異步方法調(diào)用,需在啟動(dòng)類上添加 @EnableAsync 注解

3.3 定義異步方法

在服務(wù)類中定義一個(gè)方法,并使用 @Async 注解標(biāo)記它以實(shí)現(xiàn)異步執(zhí)行

4、Api說(shuō)明

4.1 fixedDelay

@Scheduled(fixedDelay = 4000) 

4.2 fixedRate

@Scheduled(fixedRate = 10000) 

4.3 initialDelay

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

4.4 cron(掌握)

cron表達(dá)式 ① 格式

Seconds Minutes Hours Day Month Week

② 特殊符號(hào)

*:任意值
-:范圍,eg:3-5指3點(diǎn)到5點(diǎn)執(zhí)行
,:枚舉,eg:3,5指3點(diǎn)和5點(diǎn)執(zhí)行
/:增量,eg:3/5從第3秒開(kāi)始每隔5秒執(zhí)行一次
?:忽略,且只能在 日期域 或 星期域 只用

③ 練習(xí) 標(biāo)準(zhǔn)格式: * * * * * ?

周一至周五的上午10:15觸發(fā)

0 15 10 ? * 2-6

表示在每月的1日的凌晨2點(diǎn)調(diào)整任務(wù)

0 0 2 1 * ?

朝九晚五工作時(shí)間內(nèi)每半小時(shí)

0 0/30 9-16 * * ?

每天上午10點(diǎn),下午2點(diǎn),4點(diǎn)

0 0 10,14,16 * * ?

表示每個(gè)星期三中午12點(diǎn)

0 0 12 ? * 4

在每天下午2點(diǎn)到下午2:59期間的每1分鐘觸發(fā)

0 /1 14-15 * * ?

在每天下午2點(diǎn)到下午2:05期間的每1分鐘觸發(fā)

0 0-5/1 14 * * ?

在每天下午2點(diǎn)到下午2:55期間的每5分鐘觸發(fā)

0 0-55/5 14 * * ?

在每天下午2點(diǎn)到2:55期間和下午6點(diǎn)到6:55期間的每5分鐘觸發(fā)

0 0-55/5 14,18 * * ?

到此這篇關(guān)于分布式調(diào)度器之Spring Task 的使用詳解的文章就介紹到這了,更多相關(guān)Spring Task 使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java調(diào)用回調(diào)機(jī)制詳解

    java調(diào)用回調(diào)機(jī)制詳解

    這篇文章主要介紹了java調(diào)用回調(diào)機(jī)制詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java中的Unsafe在安全領(lǐng)域的使用總結(jié)和復(fù)現(xiàn)(實(shí)例詳解)

    Java中的Unsafe在安全領(lǐng)域的使用總結(jié)和復(fù)現(xiàn)(實(shí)例詳解)

    unsafe里面有很多好用的方法,比如allocateInstance可以直接創(chuàng)建實(shí)例對(duì)象,defineAnonymousClass可以創(chuàng)建一個(gè)VM匿名類(VM?Anonymous?Class),以及直接從內(nèi)存級(jí)別修改對(duì)象的值。這篇文章主要介紹了Java中的Unsafe在安全領(lǐng)域的一些應(yīng)用總結(jié)和復(fù)現(xiàn),需要的朋友可以參考下
    2022-03-03
  • Spring中的@ConditionalOnProperty作用和用法詳解

    Spring中的@ConditionalOnProperty作用和用法詳解

    這篇文章主要介紹了Spring中的@ConditionalOnProperty作用和用法詳解,在spring boot中有時(shí)候需要控制配置類是否生效,可以使用@ConditionalOnProperty注解來(lái)控制@Configuration是否生效,需要的朋友可以參考下
    2023-11-11
  • Java中比較運(yùn)算符compareTo()、equals()與==的區(qū)別及應(yīng)用總結(jié)

    Java中比較運(yùn)算符compareTo()、equals()與==的區(qū)別及應(yīng)用總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java中比較運(yùn)算符compareTo()、equals()與==的區(qū)別及應(yīng)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • java多線程編程之使用runnable接口創(chuàng)建線程

    java多線程編程之使用runnable接口創(chuàng)建線程

    實(shí)現(xiàn)Runnable接口的類必須使用Thread類的實(shí)例才能創(chuàng)建線程,通過(guò)Runnable接口創(chuàng)建線程分為以下兩步
    2014-01-01
  • 淺談SpringBoot中的Bean初始化方法?@PostConstruct

    淺談SpringBoot中的Bean初始化方法?@PostConstruct

    這篇文章主要介紹了SpringBoot中的Bean初始化方法?@PostConstruct,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 不了解這12個(gè)語(yǔ)法糖,別說(shuō)你會(huì)Java

    不了解這12個(gè)語(yǔ)法糖,別說(shuō)你會(huì)Java

    這篇文章主要介紹了不了解這12個(gè)語(yǔ)法糖,別說(shuō)你會(huì)Java,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Spring中allowedOriginPatterns和allowedOrigins方法有何不同詳解

    Spring中allowedOriginPatterns和allowedOrigins方法有何不同詳解

    這篇文章主要給大家介紹了關(guān)于Spring中allowedOriginPatterns和allowedOrigins方法有何不同,allowedOriginPatterns和allowedOrigins都是用來(lái)設(shè)置允許跨域請(qǐng)求的來(lái)源,需要的朋友可以參考下
    2023-10-10
  • 基于SpringBoot實(shí)現(xiàn)大文件分塊上傳功能

    基于SpringBoot實(shí)現(xiàn)大文件分塊上傳功能

    這篇文章主要介紹了基于SpringBoot實(shí)現(xiàn)大文件分塊上傳功能,實(shí)現(xiàn)原理其實(shí)很簡(jiǎn)單,核心就是客戶端把大文件按照一定規(guī)則進(jìn)行拆分,比如20MB為一個(gè)小塊,分解成一個(gè)一個(gè)的文件塊,然后把這些文件塊單獨(dú)上傳到服務(wù)端,需要的朋友可以參考下
    2024-09-09
  • 簡(jiǎn)單了解Spring Bean常用注解的裝配

    簡(jiǎn)單了解Spring Bean常用注解的裝配

    這篇文章主要介紹了簡(jiǎn)單了解Spring Bean常用注解的裝配,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評(píng)論