在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

如何使用Spring scheduling task簡化定時任務(wù)功能的實(shí)現(xiàn)?

冬至子 ? 來源:天碼營 ? 作者:Cliff ? 2023-05-22 16:48 ? 次閱讀

很多時候,我們有這么一個需求,需要在每天的某個固定時間或者每隔一段時間讓應(yīng)用去執(zhí)行某一個任務(wù)。為了實(shí)現(xiàn)這個需求,通常我們會通過多線程來實(shí)現(xiàn)這個功能,但是這樣我們需要自己做一些比較麻煩的工作。接下來,讓我們看看如何使用Spring scheduling task簡化定時任務(wù)功能的實(shí)現(xiàn)。

添加maven依賴

為了方便展示,我們使用Spring Boot來簡化我們的Spring配置。因?yàn)槲覀兪褂玫氖荢pring自帶的Scheduling,因此我們只需要引入最進(jìn)本的spring-boot-starter即可。

<parent>
    <groupId>org.springframework.boot<span class="hljs-name"groupId>
    <artifactId>spring-boot-starter-parent<span class="hljs-name"artifactId>
    <version>1.2.5.RELEASE<span class="hljs-name"version>
<span class="hljs-name"parent>

<properties>
    <java.version>1.8<span class="hljs-name"java.version>
<span class="hljs-name"properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot<span class="hljs-name"groupId>
        <artifactId>spring-boot-starter<span class="hljs-name"artifactId>
    <span class="hljs-name"dependency>
<span class="hljs-name"dependencies>

注意,Spring boot需要JDK8的編譯環(huán)境。

創(chuàng)建Scheduled Task

讓我們創(chuàng)建一個ScheduleTask來實(shí)現(xiàn)我們的需求:

@Component
public class ScheduledTask {

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private Integer count0 = 1;
    private Integer count1 = 1;
    private Integer count2 = 1;

    @Scheduled(fixedRate = 5000)
    public void reportCurrentTime() throws InterruptedException {
        System.out.println(String.format("---第%s次執(zhí)行,當(dāng)前時間為:%s", count0++, dateFormat.format(new Date())));
    }

    @Scheduled(fixedDelay = 5000)
    public void reportCurrentTimeAfterSleep() throws InterruptedException {
        System.out.println(String.format("===第%s次執(zhí)行,當(dāng)前時間為:%s", count1++, dateFormat.format(new Date())));
    }

    @Scheduled(cron = "*/5 * * * * *")
    public void reportCurrentTimeCron() throws InterruptedException {
        System.out.println(String.format("+++第%s次執(zhí)行,當(dāng)前時間為:%s", count2++, dateFormat.format(new Date())));
    }

}

可以看到,我們在我們真正需要執(zhí)行的方法上添加了@Scheduled標(biāo)注,表示這個方法是需要定時執(zhí)行的。

@Scheduled標(biāo)注中,我們使用了三種方式來實(shí)現(xiàn)了同一個功能:每隔5秒鐘記錄一次當(dāng)前的時間:

fixedRate = 5000表示每隔5000ms,Spring scheduling會調(diào)用一次該方法,不論該方法的執(zhí)行時間是多少

fixedDelay = 5000表示當(dāng)方法執(zhí)行完畢5000ms后,Spring scheduling會再次調(diào)用該方法

cron = "*/5 * * * * * *"提供了一種通用的定時任務(wù)表達(dá)式,這里表示每隔5秒執(zhí)行一次。

配置Scheduling

接下來我們通過Spring boot來配置一個最簡單的Spring web應(yīng)用,我們只需要一個帶有main方法的類即可:

[]()

@SpringBootApplication
@EnableScheduling
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

}

我們先來看看class上的標(biāo)注:

@SpringBootApplication 實(shí)際上是了以下三個標(biāo)注的集合:

@Configuration 告訴Spring這是一個配置類,里面的所有標(biāo)注了@Bean的方法的返回值將被注冊為一個Bean

@EnableAutoConfiguration 告訴Spring基于class path的設(shè)置、其他bean以及其他設(shè)置來為應(yīng)用添加各種Bean

@ComponentScan 告訴Spring掃描Class path下所有類來生成相應(yīng)的Bean

@EnableScheduling 告訴Spring創(chuàng)建一個task executor,如果我們沒有這個標(biāo)注,所有@Scheduled標(biāo)注都不會執(zhí)行

通過以上標(biāo)注,我們完成了schedule的基本配置。最后,我們添加main方法來啟動一個Spring boot應(yīng)用即可。

測試

在根目錄下執(zhí)行命令:mvn spring-boot:run,我們可以看到:

圖片

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

    關(guān)注

    0

    文章

    138

    瀏覽量

    24767
  • JDK
    JDK
    +關(guān)注

    關(guān)注

    0

    文章

    83

    瀏覽量

    16832
收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    關(guān)于stm32系統(tǒng)定時任務(wù)的問題

    在用stm32做一個飛控程序時。需要用到上面這種系統(tǒng)循環(huán)定時任務(wù),有一個問題:在System_Task_Loop函數(shù)里面,有1ms 、2ms、5ms的循環(huán)任務(wù),但是他的這些定時是怎么得
    發(fā)表于 10-10 23:43

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

    Spring Boot應(yīng)該是目前最火的java開源框架了,它簡化了我們創(chuàng)建一個web服務(wù)的過程,讓我們可以在很短時間、基本零配置就可以啟動一個web服務(wù)。
    的頭像 發(fā)表于 01-20 17:38 ?2676次閱讀

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

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

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

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

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

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

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

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

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

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

    SpringBoot如何實(shí)現(xiàn)定時任務(wù)(上)

    SpringBoot創(chuàng)建定時任務(wù)的方式很簡單,主要有兩種方式:一、基于注解的方式(@Scheduled)二、數(shù)據(jù)庫動態(tài)配置。實(shí)際開發(fā)中,第一種需要在代碼中寫死表達(dá)式,如果修改起來,又得重啟會顯得很麻煩;所以我們往往會采取第二種方式,可以直接從數(shù)據(jù)庫中讀取定時任務(wù)的指定執(zhí)行
    的頭像 發(fā)表于 04-07 14:51 ?1543次閱讀
    SpringBoot如何<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>定時任務(wù)</b>(上)

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

    Spring + SpringMVC 環(huán)境中,一般來說,要實(shí)現(xiàn)定時任務(wù),我們有兩中方案,一種是使用 Spring 自帶的定時任務(wù)處理器
    的頭像 發(fā)表于 04-07 14:55 ?1789次閱讀
    <b class='flag-5'>Spring</b> Boot中整合兩種<b class='flag-5'>定時任務(wù)</b>的方法

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

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

    如何動態(tài)添加修改刪除定時任務(wù)

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

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

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

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

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

    定時器如何實(shí)現(xiàn)定時任務(wù)

    1.1、單次定時任務(wù)實(shí)現(xiàn) boost 的asio庫里有幾個定時器,老的有 deadline_timer , 還有三個可配合 C++11 的 chrono
    的頭像 發(fā)表于 11-09 17:20 ?1385次閱讀

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

    習(xí)慣了使用 windows 的計(jì)劃任務(wù),使用 linux 中的 crontab 管理定時任務(wù)時很不適應(yīng)。
    的頭像 發(fā)表于 08-14 18:16 ?1089次閱讀
    linux<b class='flag-5'>定時任務(wù)</b>的用法總結(jié)
    主站蜘蛛池模板: 2015xxxx欧美| 欧洲不卡一卡2卡三卡4卡网站 | 性在线视频 | 国内激情自拍 | 亚洲精品香蕉婷婷在线观看 | 日日夜夜天天操 | 一个人看aaaa免费中文 | 日本大片免费播放网站 | 天天干天天做 | 国产伦精品一区二区三区免 | 六月婷婷激情综合 | 狠狠躁| 国产日韩精品一区二区三区 | 91成人免费| 女人张腿让男子桶免费动态图 | 亚洲国产成人久久三区 | 国产理论视频在线观看 | 成人夜色香网站在线观看 | 理论片国产 | 来吧成人综合网 | 操碰视频在线 | 色噜噜亚洲精品中文字幕 | 成人综合网站 | 性夜影院爽黄a免费视频 | 天天久久影视色香综合网 | 亚洲一级毛片免观看 | 爱爱帝国亚洲一区二区三区 | 欧美一级黄视频 | 国模福利 | 成熟妇女毛耸耸性视频 | 国外免费精品视频在线观看 | 国产午夜小视频 | 女性一级全黄生活片免费看 | 国产乱子伦一区二区三区 | 日本精品一卡二卡≡卡四卡 | sihu免费观看在线高清 | 一级中文字幕乱码免费 | 四虎传媒 | 色综合综合色 | 午夜在线网站 | 日本a级片视频 |