一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

冬至子 ? 來(lái)源:天碼營(yíng) ? 作者:Cliff ? 2023-05-22 16:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

添加maven依賴

為了方便展示,我們使用Spring Boot來(lái)簡(jiǎn)化我們的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)建一個(gè)ScheduleTask來(lái)實(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)前時(shí)間為:%s", count0++, dateFormat.format(new Date())));
    }

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

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

}

可以看到,我們?cè)谖覀冋嬲枰獔?zhí)行的方法上添加了@Scheduled標(biāo)注,表示這個(gè)方法是需要定時(shí)執(zhí)行的。

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

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

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

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

配置Scheduling

接下來(lái)我們通過(guò)Spring boot來(lái)配置一個(gè)最簡(jiǎn)單的Spring web應(yīng)用,我們只需要一個(gè)帶有main方法的類即可:

[]()

@SpringBootApplication
@EnableScheduling
public class App {

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

}

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

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

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

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

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

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

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

測(cè)試

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

圖片

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

    關(guān)注

    0

    文章

    138

    瀏覽量

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

    關(guān)注

    0

    文章

    83

    瀏覽量

    16885
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

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

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

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

    spring boot項(xiàng)目中,可以通過(guò) @EnableScheduling 注解和@Scheduled注解實(shí)現(xiàn)定時(shí)任務(wù),也可以通過(guò)SchedulingConfigurer接口來(lái)實(shí)現(xiàn)
    的頭像 發(fā)表于 09-24 09:49 ?3222次閱讀
    SpringBoot如何<b class='flag-5'>實(shí)現(xiàn)</b>動(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。接下來(lái)整理的是常見的Python定時(shí)任務(wù)
    的頭像 發(fā)表于 10-08 15:20 ?9952次閱讀

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    按計(jì)劃執(zhí)行命令對(duì)于計(jì)算機(jī)來(lái)說(shuō)非常重要,因?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 ?2361次閱讀

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

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

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

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

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

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