最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用springboot時(shí),解決@Scheduled定時(shí)器遇到的問(wèn)題

 更新時(shí)間:2021年11月02日 08:36:08   作者:teng_sd_cn  
這篇文章主要介紹了使用springboot時(shí),解決@Scheduled定時(shí)器遇到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

@Scheduled定時(shí)器遇到的問(wèn)題

@Scheduled 這個(gè)注解確實(shí)給我們帶了很大的方便,我們只要加上該注解,并且根據(jù)需求設(shè)置好就可以使用定時(shí)任務(wù)了。

但是,我們需要注意的是,@Scheduled 并不一定一定會(huì)按時(shí)執(zhí)行。

因?yàn)槭褂聾Scheduled 的定時(shí)任務(wù)雖然是異步執(zhí)行的,但是,不同的定時(shí)任務(wù)之間并不是并行的?。。。。。。?!

在其中一個(gè)定時(shí)任務(wù)沒(méi)有執(zhí)行完之前,其他的定時(shí)任務(wù)即使是到了執(zhí)行時(shí)間,也是不會(huì)執(zhí)行的,它們會(huì)進(jìn)行排隊(duì)。

也就是如果你想你不同的定時(shí)任務(wù)互不影響,到時(shí)間就會(huì)執(zhí)行,那么你最好將你的定時(shí)任務(wù)方法自己搞成異步方法,這樣,

定時(shí)任務(wù)其實(shí)就相當(dāng)于調(diào)用了一個(gè)線程執(zhí)行任務(wù),一瞬間就結(jié)束了。當(dāng)然,也可以勉強(qiáng)當(dāng)做是任務(wù)都會(huì)定時(shí)執(zhí)行。

下面說(shuō)一下@Scheduled 注解的幾個(gè)參數(shù)

一、可以通過(guò)配置文件配置進(jìn)來(lái)的

使用表達(dá)式,該表達(dá)式表示每一秒中執(zhí)行一次。如果上一次方法超過(guò)了定時(shí)時(shí)間還沒(méi)有執(zhí)行完,那么下一次定時(shí)不會(huì)執(zhí)行,

直到上次方法執(zhí)行完后,就會(huì)立即執(zhí)行下一次的定時(shí)任務(wù)

該方式在工程啟動(dòng)的時(shí)候,并不會(huì)立即執(zhí)行,會(huì)按照定時(shí)表達(dá)式的規(guī)律進(jìn)行執(zhí)行。例如這里,就是1秒后才會(huì)執(zhí)行。

@Scheduled(cron="0/1 * * * * ?")   

使用固定速率。該表達(dá)式表示每隔一秒鐘執(zhí)行一次。如果上一次方法超過(guò)了1秒鐘還沒(méi)執(zhí)行完,下一次任務(wù)也不會(huì)執(zhí)行,直到

上次方法執(zhí)行完,下次的定時(shí)就會(huì)立即執(zhí)行。

該方式在工程啟動(dòng)的時(shí)候,會(huì)立即執(zhí)行,接下來(lái)會(huì)按規(guī)律進(jìn)行執(zhí)行。

@Scheduled(fixedRateString="1000")   // 單位:毫秒

該方式和上一個(gè)的不同在于多加了一個(gè)參數(shù),這個(gè)參數(shù)是一個(gè)初始化參數(shù)。

加上initialDelayString后,在剛啟動(dòng)的時(shí)候,就不會(huì)立即執(zhí)行了,而是會(huì)等到10秒之后才會(huì)執(zhí)行,即使fixedRateString才

1秒鐘。也會(huì)在10秒后才會(huì)第一次執(zhí)行。

注意:initialDelayString不能喝cron組合使用。

@Scheduled(fixedRateString="1000",initialDelayString="10000")

使用固定延遲。該表達(dá)式表示每次執(zhí)行完后一秒再次執(zhí)行。每一次執(zhí)行,無(wú)論執(zhí)行多長(zhǎng)時(shí)間,下一次執(zhí)行都會(huì)在上一次方法

執(zhí)行完后,再過(guò)一秒鐘,再次執(zhí)行。

該方式在工程啟動(dòng)的時(shí)候,會(huì)立即執(zhí)行,接下來(lái)會(huì)按規(guī)律進(jìn)行執(zhí)行。

@Scheduled(fixedDelayString="1000")

二、不可通過(guò)配置文件配置的 (作用相同)

   @Scheduled(fixedRate=1000)      // 它們都是接受一個(gè)long類(lèi)型的參數(shù)
   @Scheduled(fixedDelay=1000)
   @Scheduled(fixedRate=1000,initialDelay=10000)

這里粘貼一下cron表達(dá)式的規(guī)則:

字段 允許值 允許的特殊字符
0-59 , - * /
小時(shí) 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可選) 留空, 1970-2099 , - * /

定時(shí)任務(wù)@Scheduled使用的那些坑

@Scheduled是spring自帶的注解,默認(rèn)是單線程,常用作定時(shí)任務(wù)使用,但是如果是集群版的機(jī)器的話,就考慮加上分布式鎖或者使用分布式定時(shí)任務(wù)代替。

一、使用的那些坑?

1.單線程

因?yàn)锧Scheduled默認(rèn)使用的是單線程,如果有兩個(gè)任務(wù)A和B,那么任務(wù)A要是阻塞了,任務(wù)B就無(wú)法執(zhí)行。

2.@Async和@EnableAsync

為了解決單線程帶來(lái)的線程阻塞問(wèn)題,我們可以使用@Async和@EnableAsync兩個(gè)注解采用異步的方式去處理,這樣就是不同的線程去執(zhí)行,但是這種方式也帶來(lái)一個(gè)新的問(wèn)題,那就是如果任務(wù)A的任務(wù)執(zhí)行時(shí)間>任務(wù)調(diào)度周期時(shí)間的話,就會(huì)發(fā)生上一個(gè)任務(wù)未執(zhí)行完畢,下一個(gè)任務(wù)又開(kāi)始執(zhí)行的邏輯,這種也是有風(fēng)險(xiǎn)的。所以最好使用多線程方式,自己控制線程池的數(shù)量,線程名稱等。

二、使用多線程

需要實(shí)現(xiàn)SchedulingConfigurer接口,然后自定義線程池,這樣凡是用到@Scheduled注解的都可以用該線程池,同時(shí)也解決了上述比較坑的兩個(gè)問(wèn)題。

@Configuration
@EnableScheduling
public class ScheduleConfig implements SchedulingConfigurer {
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.setScheduler(taskExecutor());
    }
    @Bean
    public Executor taskExecutor() {
        return Executors.newScheduledThreadPool(20, (Runnable r) -> {
            Thread thread = new Thread(r);
            thread.setName("自定義線程名稱");
            return thread;
        });
    }
}

以上這一行

thread.setName(“自定義線程名稱”);

是設(shè)置線程名稱,可以通過(guò)Thread.currentThread().getName()拿到該名稱,便于在日志中進(jìn)行排查問(wèn)題。

小結(jié)一下

集群版本如果要使用@Scheduled的話,需要加分布式鎖來(lái)控制,或者直接用分布式定時(shí)任務(wù)Elasticjob或者xxl-job等。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring Boot 各種回滾操作實(shí)戰(zhàn)教程(自動(dòng)回滾、手動(dòng)回滾、部分回滾)

    Spring Boot 各種回滾操作實(shí)戰(zhàn)教程(自動(dòng)回滾、手動(dòng)回滾、部分回滾)

    這篇文章主要介紹了Spring Boot 各種回滾操作實(shí)戰(zhàn)教程(自動(dòng)回滾、手動(dòng)回滾、部分回滾),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • MyBatis中?@Mapper?和?@MapperScan?的區(qū)別與使用解析

    MyBatis中?@Mapper?和?@MapperScan?的區(qū)別與使用解析

    本文介紹了SpringBoot中MyBatis的兩個(gè)常用注解:@Mapper和@MapperScan,@Mapper用于標(biāo)記單個(gè)Mapper接口,而@MapperScan用于批量掃描指定包下的所有Mapper接口,兩者都有各自適用的場(chǎng)景,選擇合適的注解可以提高開(kāi)發(fā)效率并使代碼更加簡(jiǎn)潔,感興趣的朋友一起看看吧
    2025-01-01
  • 徹底理解Java 中的ThreadLocal

    徹底理解Java 中的ThreadLocal

    這篇文章主要介紹了徹底理解Java 中的ThreadLocal的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Springboot如何使用YML文件配置多環(huán)境

    Springboot如何使用YML文件配置多環(huán)境

    這篇文章主要介紹了Springboot如何使用YML文件配置多環(huán)境問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 解決maven常見(jiàn)錯(cuò)誤:Dependency is duplicated in file(s):

    解決maven常見(jiàn)錯(cuò)誤:Dependency is duplicated in 

    這篇文章主要介紹了解決maven常見(jiàn)錯(cuò)誤:Dependency is duplicated in file(s):問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • java字符串相加時(shí)的內(nèi)存表現(xiàn)和原理分析

    java字符串相加時(shí)的內(nèi)存表現(xiàn)和原理分析

    這篇文章主要介紹了java字符串相加時(shí)的內(nèi)存表現(xiàn)和原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 使用Java創(chuàng)建數(shù)據(jù)透視表并導(dǎo)出為PDF的方法

    使用Java創(chuàng)建數(shù)據(jù)透視表并導(dǎo)出為PDF的方法

    數(shù)據(jù)透視分析是一種強(qiáng)大的工具,可以幫助我們從大量數(shù)據(jù)中提取有用信息并進(jìn)行深入分析,本文將介紹如何使用Java來(lái)構(gòu)建PivotTable以及實(shí)現(xiàn)數(shù)據(jù)透視分析,并將其導(dǎo)出為PDF
    2023-10-10
  • SpringBoot使用Cache集成Redis做緩存的保姆級(jí)教程

    SpringBoot使用Cache集成Redis做緩存的保姆級(jí)教程

    Spring Cache是Spring框架提供的一個(gè)緩存抽象層,它簡(jiǎn)化了緩存的使用和管理,Spring Cache默認(rèn)使用服務(wù)器內(nèi)存,并無(wú)法控制緩存時(shí)長(zhǎng),查找緩存中的數(shù)據(jù)比較麻煩,本文已常用的Redis作為緩存中間件作為示例,詳細(xì)講解項(xiàng)目中如何使用Cache提高系統(tǒng)性能,需要的朋友可以參考下
    2025-01-01
  • JavaWeb中的filter過(guò)濾敏感詞匯案例詳解

    JavaWeb中的filter過(guò)濾敏感詞匯案例詳解

    敏感詞、文字過(guò)濾是一個(gè)網(wǎng)站必不可少的功能,本篇文章主要介紹了JavaWeb中的filter過(guò)濾敏感詞匯案例,具有一定的參考價(jià)值,有需要的可以了解一下,
    2016-11-11
  • Java上轉(zhuǎn)型和下轉(zhuǎn)型對(duì)象

    Java上轉(zhuǎn)型和下轉(zhuǎn)型對(duì)象

    這篇文章給大家講述了Java上轉(zhuǎn)型和下轉(zhuǎn)型對(duì)象的詳細(xì)用法以及相關(guān)的代碼分享,有興趣的朋友可以學(xué)習(xí)下。
    2018-03-03

最新評(píng)論

璧山县| 潜江市| 商水县| 东平县| 麻阳| 界首市| 外汇| 定远县| 万山特区| 长汀县| 鹤峰县| 叶城县| 孝昌县| 平昌县| 尉犁县| 明光市| 泗阳县| 盱眙县| 简阳市| 通江县| 肇庆市| 英德市| 辰溪县| 弋阳县| 沈丘县| 方正县| 密云县| 山阴县| 乌鲁木齐市| 河东区| 石屏县| 布拖县| 定南县| 宁晋县| 道孚县| 武义县| 喀喇| 安岳县| 安平县| 剑河县| 淮南市|