0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Spring Boot定時(shí)任務(wù)的重寫方法

汽車玩家 ? 來源:扣丁學(xué)堂 ? 作者:扣丁學(xué)堂 ? 2020-01-20 17:38 ? 次閱讀

Spring Boot應(yīng)該是目前最火的java開源框架了,它簡化了我們創(chuàng)建一個(gè)web服務(wù)的過程,讓我們可以在很短時(shí)間、基本零配置就可以啟動(dòng)一個(gè)web服務(wù)。

定時(shí)任務(wù)在我們平常的業(yè)務(wù)開發(fā)用的非常多,Spring Boot創(chuàng)建一個(gè)定時(shí)任務(wù)很簡單,只需要用@Scheduled注解方法,就可以讓方法按照定義的時(shí)間進(jìn)行運(yùn)行。但是,Spring Boot的@Scheduled默認(rèn)是單線程的,也就是如果有兩個(gè)定時(shí)任務(wù),那第二個(gè)定時(shí)必須在第一個(gè)定時(shí)任務(wù)執(zhí)行完成之后才能開始執(zhí)行。當(dāng)然我們可以使用@Async讓方法異步,來達(dá)到多線程的目的。但是,今天我要講的是如何重寫Spring Boot定時(shí)任務(wù),并可支持動(dòng)態(tài)調(diào)整執(zhí)行時(shí)間。

1、定義我們需要定時(shí)觸發(fā)的任務(wù)方法

Spring Boot定時(shí)任務(wù)的重寫方法

實(shí)例代碼中我們定義了兩個(gè)需要進(jìn)行定時(shí)觸發(fā)的任務(wù)。并且自定義注解@CronScheduled

2、自定義注解@CronScheduled

自定義注解的作用主要在于后續(xù)的邏輯可以獲取到該方法的執(zhí)行周期。同時(shí)也可以定義其它的屬性,用于后續(xù)的業(yè)務(wù)邏輯處理

Spring Boot定時(shí)任務(wù)的重寫方法

3、注冊定時(shí)任務(wù)

標(biāo)題我們提出了支持可動(dòng)態(tài)調(diào)整執(zhí)行時(shí)間。平常的定時(shí)任務(wù)中我們沒法動(dòng)態(tài)調(diào)整執(zhí)行時(shí)間,除非重啟應(yīng)用。那我們咋這里怎么動(dòng)態(tài)調(diào)整時(shí)間呢?思路是:重新注冊任務(wù)。當(dāng)我們檢測到定時(shí)任務(wù)的執(zhí)行時(shí)間發(fā)生變化,我們就重新注冊任務(wù)。如果我們的定時(shí)任務(wù)表達(dá)式是配置在數(shù)據(jù)庫,那我們可以定時(shí)輪訓(xùn)數(shù)據(jù)庫獲取,檢測到變化了就重新注冊。如果是配置在配種中心,配置中心一般會(huì)有觸發(fā)器trigger。當(dāng)我們接受配置中心數(shù)據(jù)發(fā)生變化的通知以后,我們重新注冊定時(shí)任務(wù)。

重新注冊任務(wù)的方法

reReqiester方法可以暴露出去被其它類調(diào)用。當(dāng)外部邏輯檢測到定時(shí)任務(wù)的執(zhí)行時(shí)間發(fā)生變化,調(diào)用此方法重新注冊定時(shí)任務(wù)

ScheduledTaskRegistrar是Task的一個(gè)容器, 內(nèi)部維護(hù)了這些Task List和executor的引用, 并負(fù)責(zé)將Task置入executor中執(zhí)行。ScheduledTaskRegistrar的實(shí)現(xiàn)原理大家自行研究。這里就不進(jìn)行詳細(xì)解釋。

實(shí)現(xiàn)BeanPostProcessor可以在ScheduleTask對象實(shí)例化以后,我們調(diào)用自己的邏輯方法。在這里我們用來觸發(fā)configureTasks方法。

至此,我們就自己實(shí)現(xiàn)了定時(shí)任務(wù)的調(diào)度,在調(diào)度的過程中,我們也可以加入自己邏輯處理業(yè)務(wù)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Web
    Web
    +關(guān)注

    關(guān)注

    2

    文章

    1275

    瀏覽量

    70256
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2982

    瀏覽量

    106163
收藏 0人收藏

    評論

    相關(guān)推薦

    Spring Boot如何實(shí)現(xiàn)異步任務(wù)

    Spring Boot 提供了多種方式來實(shí)現(xiàn)異步任務(wù),這里介紹三種主要實(shí)現(xiàn)方式。 1、基于注解 @Async @Async 注解是 Spring 提供的一種輕量級異步
    的頭像 發(fā)表于 09-30 10:32 ?1564次閱讀

    Linux系統(tǒng)定時(shí)任務(wù)Crond

    會(huì)定期(默認(rèn)每分鐘檢查一次)檢查系統(tǒng)中是否有要執(zhí)行的任務(wù)工作,如果有,便會(huì)根據(jù)其預(yù)先設(shè)定的定時(shí)任務(wù)規(guī)則自動(dòng)執(zhí)行該定時(shí)任務(wù)工作,這個(gè)crond定時(shí)任務(wù)服務(wù)就相當(dāng)于我們平時(shí)早起使用的鬧鐘一
    發(fā)表于 07-05 06:22

    linux的循環(huán)定時(shí)任務(wù)

    linux循環(huán)定時(shí)任務(wù)
    發(fā)表于 05-20 14:59

    SpringBoot如何實(shí)現(xiàn)動(dòng)態(tài)增刪啟停定時(shí)任務(wù)

    spring boot項(xiàng)目中,可以通過 @EnableScheduling 注解和@Scheduled注解實(shí)現(xiàn)定時(shí)任務(wù),也可以通過SchedulingConfigurer接口來實(shí)現(xiàn)定時(shí)任務(wù)
    的頭像 發(fā)表于 09-24 09:49 ?3084次閱讀
    SpringBoot如何實(shí)現(xiàn)動(dòng)態(tài)增刪啟停<b class='flag-5'>定時(shí)任務(wù)</b>

    Python定時(shí)任務(wù)的實(shí)現(xiàn)方式

    在日常工作中,我們常常會(huì)用到需要周期性執(zhí)行的任務(wù),一種方式是采用 Linux 系統(tǒng)自帶的 crond 結(jié)合命令行實(shí)現(xiàn)。另外一種方式是直接使用Python。接下來整理的是常見的Python定時(shí)任務(wù)
    的頭像 發(fā)表于 10-08 15:20 ?7567次閱讀

    說說Spring定時(shí)任務(wù)如何大規(guī)模企業(yè)級運(yùn)用

    定時(shí)任務(wù)是業(yè)務(wù)應(yīng)用開發(fā)中非常普遍存在的場景(如:每分鐘掃描超時(shí)支付的訂單,每小時(shí)清理一次數(shù)據(jù)庫歷史數(shù)據(jù),每天統(tǒng)計(jì)前一天的數(shù)據(jù)并生成報(bào)表等等),解決方案很多,Spring 框架提供了一種通過注解來配置定時(shí)任務(wù)的解決方案,接入非常的
    的頭像 發(fā)表于 11-04 09:36 ?799次閱讀

    解析Golang定時(shí)任務(wù)庫gron設(shè)計(jì)和原理

    正巧,最近看到了 gron 這個(gè)開源項(xiàng)目,它是用 Golang 實(shí)現(xiàn)一個(gè)并發(fā)安全的定時(shí)任務(wù)庫。實(shí)現(xiàn)非常簡單精巧,代碼量也不多。今天我們就來一起結(jié)合源碼看一下,怎樣基于 Golang 的能力做出來一個(gè)【定時(shí)任務(wù)庫】。
    的頭像 發(fā)表于 12-15 13:57 ?1478次閱讀

    求一種SpringBoot定時(shí)任務(wù)動(dòng)態(tài)管理通用解決方案

    SpringBoot的定時(shí)任務(wù)的加強(qiáng)工具,實(shí)現(xiàn)對SpringBoot原生的定時(shí)任務(wù)進(jìn)行動(dòng)態(tài)管理,完全兼容原生@Scheduled注解,無需對原本的定時(shí)任務(wù)進(jìn)行修改
    的頭像 發(fā)表于 02-03 09:49 ?892次閱讀

    Spring Boot中整合兩種定時(shí)任務(wù)方法

    框架 Quartz ,Spring Boot 源自 Spring+SpringMVC ,因此天然具備這兩個(gè) Spring 中的定時(shí)任務(wù)實(shí)現(xiàn)策
    的頭像 發(fā)表于 04-07 14:55 ?1687次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>中整合兩種<b class='flag-5'>定時(shí)任務(wù)</b>的<b class='flag-5'>方法</b>

    Spring Boot中如何使用定時(shí)任務(wù)

    本文介紹在 Spring Boot 中如何使用定時(shí)任務(wù),使用非常簡單,就不做過多說明了。
    的頭像 發(fā)表于 04-12 10:56 ?1086次閱讀

    如何動(dòng)態(tài)添加修改刪除定時(shí)任務(wù)?

    如何動(dòng)態(tài)添加修改刪除定時(shí)任務(wù)?那么我們一起看看具體怎么實(shí)現(xiàn),先看下本節(jié)大綱: (1)思路說明; (2)代碼解析; (3)修改定時(shí)任務(wù)執(zhí)行周期特別說明;
    的頭像 發(fā)表于 04-12 11:06 ?1218次閱讀

    Linux如何使用cron進(jìn)行定時(shí)任務(wù)的操作

    按計(jì)劃執(zhí)行命令對于計(jì)算機(jī)來說非常重要,因?yàn)榧偃缥矣H自去執(zhí)行一些任務(wù)的話,可能會(huì)因?yàn)槎喾矫嬉蛩夭荒馨磿r(shí)執(zhí)行,所以定時(shí)任務(wù)就顯得非常重要了! cron就是一個(gè)能夠執(zhí)行定時(shí)任務(wù)的命令,其實(shí)該命令本身不難,下面小編帶您詳細(xì)了解!
    的頭像 發(fā)表于 05-12 16:27 ?2166次閱讀

    python定時(shí)任務(wù)實(shí)踐

    由于程序需求,監(jiān)測配置變化需要設(shè)置定時(shí)任務(wù),每分鐘執(zhí)行一次,對任務(wù)持久化要求不高,不需要時(shí)可以關(guān)閉定時(shí)任務(wù)
    的頭像 發(fā)表于 05-20 17:53 ?1064次閱讀
    python<b class='flag-5'>定時(shí)任務(wù)</b>實(shí)踐

    Spring Boot 的設(shè)計(jì)目標(biāo)

    什么是Spring Boot Spring BootSpring 開源組織下的一個(gè)子項(xiàng)目,也是 S
    的頭像 發(fā)表于 10-13 14:56 ?672次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的設(shè)計(jì)目標(biāo)

    linux定時(shí)任務(wù)的用法總結(jié)

    習(xí)慣了使用 windows 的計(jì)劃任務(wù),使用 linux 中的 crontab 管理定時(shí)任務(wù)時(shí)很不適應(yīng)。
    的頭像 發(fā)表于 08-14 18:16 ?1000次閱讀
    linux<b class='flag-5'>定時(shí)任務(wù)</b>的用法總結(jié)

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品