成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Spring Boot(四)Spring Boot 中的定時任務(wù)

firim / 1091人閱讀

摘要:對于定時任務(wù)類如果不定義線程池,控制臺輸出如下,可以看到不同的定時任務(wù)是同一個線程在執(zhí)行在配置類或者啟動類中增加定時任務(wù)的線程池控制臺輸出本節(jié)示例代碼已上傳到

一.SpringBoot中開啟定時任務(wù)

在spirngboot中使用定時任務(wù)非常簡單,只需要在啟動類上增加一個@EnableScheduling注解即可。

@SpringBootApplication
@EnableScheduling
public class Application {

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

}


二.定時任務(wù)的創(chuàng)建

對定時任務(wù)的類增加@Component注解,加入Spring的容器管理中

@Component
public class ScheduleJob {

        ......

}

主要有三種定時的方式:

1.fixedRate
該屬性的含義是上一個調(diào)用開始后再次調(diào)用的延時(不用等待上一次調(diào)用完成),這樣就可能會存在任務(wù)重復(fù)執(zhí)行的問題,所以不是建議使用,但數(shù)據(jù)量如果不大時在配置的間隔時間內(nèi)可以執(zhí)行完也是可以使用的。配置示例如下圖5所示:

@Scheduled(fixedRate = 1000 * 1)
public void fixedRateTask() throws InterruptedException {
    TimeUnit.SECONDS.sleep(2);
    System.out.println("執(zhí)行 fixedRate 任務(wù)的時間:" + new Date(System.currentTimeMillis()));
}

控制臺輸出:

任務(wù)觸發(fā)的間隔都是2秒,說明該方法并沒有等到執(zhí)行完再開始下次執(zhí)行(如果等待執(zhí)行完應(yīng)該需要3秒),而且看起來像一個單線程加隊列的方式在執(zhí)行。

2.fixedDelay
該屬性的功效與上面的fixedRate則是相反的,配置了該屬性后會等到方法執(zhí)行完成后延遲配置的時間再次執(zhí)行該方法。

@Scheduled(fixedDelay = 1000 * 1)
public void fixedDelayTask() throws InterruptedException {
    TimeUnit.SECONDS.sleep(3);
    System.out.println("執(zhí)行 fixedDelay 任務(wù)的時間:" + new Date(System.currentTimeMillis()));
}

控制臺輸出結(jié)果:

3.cron表達(dá)式

@Scheduled(cron = "0/10 * * * * ?")
public void cronTask() {
    System.out.println("執(zhí)行 cron 任務(wù)的時間:" + new Date(System.currentTimeMillis()));
}

控制臺輸出:


三.定時任務(wù)線程池

默認(rèn)情況下,如果什么都不進(jìn)行配置,就會導(dǎo)致一個問題,系統(tǒng)中所有的定時任務(wù)都是使用的一個線程去執(zhí)行的,也就是說,如果如果同一個時刻有2個定時任務(wù)需要執(zhí)行,那么只可能有一個定時任務(wù)在執(zhí)行,如果要解決這個問題可以定義一個自定的任務(wù)調(diào)度線程池即可。

解決方案:

By default, will be searching for an associated scheduler definition: either a
unique {@link org.springframework.scheduling.TaskScheduler} bean in the context,
or a {@code TaskScheduler} bean named "taskScheduler" otherwise; the same lookup
will also be performed for a {@link java.util.concurrent.ScheduledExecutorService}
bean. If neither of the two is resolvable, a local single-threaded default
scheduler will be created and used within the registrar.

上面這一段是從org.springframework.scheduling.annotation.EnableScheduling這個注解類上的一段注釋。大致上就是我們定義一個TaskScheduler類型的bean即可解決這個問題。

對于定時任務(wù)類:

@Component
public class ScheduleTreadTest {

    @Scheduled(cron = "0/3 * * * * ?")
    public void task01() {
        System.out.println(Thread.currentThread().getName() + "----> task01");
    }

    @Scheduled(cron = "0/2 * * * * ?")
    public void task02() {
        System.out.println(Thread.currentThread().getName() + "----> task02");
    }

    @Scheduled(cron = "0/3 * * * * ?")
    public void task03() {
        System.out.println(Thread.currentThread().getName() + "----> task03");
    }

}

如果不定義線程池,控制臺輸出如下,可以看到不同的定時任務(wù)是同一個線程在執(zhí)行:

在配置類或者啟動類中增加定時任務(wù)的線程池:

控制臺輸出:

本節(jié)示例代碼已上傳到github: https://github.com/liaosilzu2...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/71043.html

相關(guān)文章

  • spring-boot | 多線程并發(fā)定時任務(wù)

    摘要:多線程并發(fā)定時任務(wù)剛剛看了下實現(xiàn)定時任務(wù)的文章,感覺還不錯。存在問題但是后來發(fā)現(xiàn)個問題,通過同時測試幾個任務(wù)發(fā)現(xiàn),所有的任務(wù)都是在同一個線程池中的同一個線程來完成的。 spring-boot | 多線程并發(fā)定時任務(wù) 剛剛看了下Spring Boot實現(xiàn)定時任務(wù)的文章,感覺還不錯。Spring Boot 使用Spring自帶的Schedule來實現(xiàn)定時任務(wù)變得非常簡單和方便。在這里個大家...

    silenceboy 評論0 收藏0
  • SpringCloud(第 046 篇)注解式Schedule配置定時任務(wù),不支持任務(wù)調(diào)度

    摘要:當(dāng)前時間打印當(dāng)前時間定時任務(wù)觸發(fā),操作多個添加數(shù)據(jù),事務(wù)中任一異常,都可以正常導(dǎo)致數(shù)據(jù)回滾。當(dāng)前時間當(dāng)前時間添加微服務(wù)啟動類注解式配置定時任務(wù),不支持任務(wù)調(diào)度。 SpringCloud(第 046 篇)注解式Schedule配置定時任務(wù),不支持任務(wù)調(diào)度 - 一、大致介紹 1、很多時候我們需要隔一定的時間去執(zhí)行某個任務(wù),為了實現(xiàn)這樣的需求通常最普通的方式就是利用多線程來實現(xiàn); 2、但是有...

    masturbator 評論0 收藏0
  • spring-boot-starter-quartz集群實踐

    摘要:前情提要由于項目需要,需要一個定時任務(wù)集群,故此有了這個集群的實踐。數(shù)據(jù)庫表前綴在被認(rèn)為失火之前,調(diào)度程序?qū)⑷萑桃粋€將其下一個啟動時間通過的毫秒數(shù)。設(shè)置此實例檢入與群集的其他實例的頻率以毫秒為單位。影響檢測失敗實例的速度。 【前情提要】由于項目需要,需要一個定時任務(wù)集群,故此有了這個spring-boot-starter-quartz集群的實踐。springboot的版本為:2.1.6...

    kycool 評論0 收藏0
  • spring定時任務(wù)調(diào)度

    本文將告訴你如何使用spring的任務(wù)調(diào)度。主要使用@Scheduled注解 需要會使用maven 第一步 pom.xml配置 4.0.0 org.xxz scheduled-task-test 1.0 org.springframework.boot spring-boot-starter-parent ...

    nodejh 評論0 收藏0
  • 慕課網(wǎng)_《SpringBoot開發(fā)常用技術(shù)整合》學(xué)習(xí)總結(jié)

    摘要:時間年月日星期四說明本文部分內(nèi)容均來自慕課網(wǎng)。哈希表實現(xiàn)命令,將哈希表中的域的值設(shè)為實現(xiàn)命令,返回哈希表中給定域的值實現(xiàn)命令,刪除哈希表中的一個或多個指定域,不存在的域?qū)⒈缓雎?。實現(xiàn)命令,返回哈希表中,所有的域和值。 時間:2018年04月19日星期四說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):https://www.imooc.com教學(xué)源碼:https://github.com/zc...

    chengtao1633 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<