欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot通過@Scheduled實現(xiàn)定時任務(wù)及單線程運行問題解決

 更新時間:2023年02月21日 09:55:26   作者:攻城獅·建哥  
Scheduled定時任務(wù)是Spring boot自身提供的功能,所以不需要引入Maven依賴包,下面這篇文章主要給大家介紹了關(guān)于SpringBoot通過@Scheduled實現(xiàn)定時任務(wù)以及問題解決的相關(guān)資料,需要的朋友可以參考下

一、開啟定時任務(wù)方法

Scheduled定時任務(wù)是Spring boot自身提供的功能,所以不需要引入Maven依賴包

在項目入口main方法上加注解

@EnableScheduling //開啟定時任務(wù)

二、不同定時方式的解析

1.fixedDelay和fixedRate,單位是毫秒,它們的區(qū)別就是:

fixedRate就是每隔多長時間執(zhí)行一次。(開始------->X時間------>再開始)。如果間隔時間小于任務(wù)執(zhí)行時間,上一次任務(wù)執(zhí)行完成下一次任務(wù)就立即執(zhí)行。如果間隔時間大于任務(wù)執(zhí)行時間,就按照每隔X時間運行一次。
而fixedDelay是當任務(wù)執(zhí)行完畢后一段時間再次執(zhí)行。(開始—>結(jié)束(隔一分鐘)開始----->結(jié)束)。上一次執(zhí)行任務(wù)未完成,下一次任務(wù)不會開始。

2.cron表達式:靈活

舉例說明

表達式說明
0 0 3 * * ?每天3點執(zhí)行
0 5 3 * * ?每天3點5分執(zhí)行
0 5 3 ? * *每天3點5分執(zhí)行,與上面作用相同
0 5/10 3 * * ?每天3點的 5分,15分,25分,35分,45分,55分這幾個時間點執(zhí)行
0 10 3 ? * 1每周星期天,3點10分 執(zhí)行,注:1表示星期天
0 10 3 ? * 1#3每個月的第三個星期,星期天 執(zhí)行,#號只能出現(xiàn)在星期的位置
  • 第一位,表示秒,取值0-59
  • 第二位,表示分,取值0-59
  • 第三位,表示小時,取值0-23
  • 第四位,日期天/日,取值1-31
  • 第五位,日期月份,取值1-12
  • 第六位,星期,取值1-7,星期一,星期二…,注:不是第1周,第二周的意思,另外:1表示星期天,2表示星期一。
  • 第七位,年份,可以留空,取值1970-2099

cron中,還有一些特殊的符號,含義如下:

  • ()星號:可以理解為每的意思,每秒,每分,每天,每月,每年…
  • (?)問號:問號只能出現(xiàn)在日期和星期這兩個位置。
  • (-)減號:表達一個范圍,如在小時字段中使用“10-12”,則表示從10到12點,即10,11,12
  • (,)逗號:表達一個列表值,如在星期字段中使用“1,2,4”,則表示星期一,星期二,星期四
  • (/)斜杠:如:x/y,x是開始值,y是步長,比如在第一位(秒) 0/15就是,從0秒開始,每15秒,最后就是0,15,30,45,60 另:/y,等同于0/y

cron表達式在線:http://tools.jb51.net/code/Quartz_Cron_create

三、實現(xiàn)定時任務(wù)

@Component
public class ScheduledJobs {
  
    //表示方法執(zhí)行完成后5秒再開始執(zhí)行
    @Scheduled(fixedDelay=5000)
    public void fixedDelayJob() throws InterruptedException{
        System.out.println("fixedDelay 開始:" + new Date());
        Thread.sleep(10 * 1000);
        System.out.println("fixedDelay 結(jié)束:" + new Date());
    }
    
    //表示每隔3秒
    @Scheduled(fixedRate=3000)
    public void fixedRateJob()throws InterruptedException{
        System.out.println("===========fixedRate 開始:" + new Date());
        Thread.sleep(5 * 1000);
        System.out.println("===========fixedRate 結(jié)束:" + new Date());
    }

    //表示每隔10秒執(zhí)行一次
    @Scheduled(cron="0/10 * * * * ? ")
    public void cronJob(){
        System.out.println("=========================== ...>>cron...." + new Date());
    }
}

運行結(jié)果如下:從運行結(jié)果上看,并未按照預期的時間規(guī)律運行。仔細看線程打印,竟然所有的定時任務(wù)使用的都是一個線程,所以彼此互相影響。

===========fixedRate 結(jié)束:Tue Jul 09 19:53:04 CST 2019pool-1-thread-1
fixedDelay 開始:Tue Jul 09 19:53:04 CST 2019pool-1-thread-1
fixedDelay 結(jié)束:Tue Jul 09 19:53:14 CST 2019pool-1-thread-1
===========fixedRate 開始:Tue Jul 09 19:53:14 CST 2019pool-1-thread-1
===========fixedRate 結(jié)束:Tue Jul 09 19:53:16 CST 2019pool-1-thread-1
===========fixedRate 開始:Tue Jul 09 19:53:16 CST 2019pool-1-thread-1
===========fixedRate 結(jié)束:Tue Jul 09 19:53:18 CST 2019pool-1-thread-1
=========================== ...>>cron....Tue Jul 09 19:53:18 CST 2019pool-1-thread-1
===========fixedRate 開始:Tue Jul 09 19:53:18 CST 2019pool-1-thread-1
===========fixedRate 結(jié)束:Tue Jul 09 19:53:20 CST 2019pool-1-thread-1
===========fixedRate 開始:Tue Jul 09 19:53:20 CST 2019pool-1-thread-1
===========fixedRate 結(jié)束:Tue Jul 09 19:53:22 CST 2019pool-1-thread-1
===========fixedRate 開始:Tue Jul 09 19:53:22 CST 2019pool-1-thread-1
===========fixedRate 結(jié)束:Tue Jul 09 19:53:24 CST 2019pool-1-thread-1
fixedDelay 開始:Tue Jul 09 19:53:24 CST 2019pool-1-thread-1
fixedDelay 結(jié)束:Tue Jul 09 19:53:34 CST 2019pool-1-thread-1
=========================== ...>>cron....Tue Jul 09 19:53:34 CST 2019pool-1-thread-1
===========fixedRate 開始:Tue Jul 09 19:53:34 CST 2019pool-1-thread-1
===========fixedRate 結(jié)束:Tue Jul 09 19:53:36 CST 2019pool-1-thread-1
===========fixedRate 開始:Tue Jul 09 19:53:36 CST 2019pool-1-thread-1
===========fixedRate 結(jié)束:Tue Jul 09 19:53:38 CST 2019pool-1-thread-1
===========fixedRate 開始:Tue Jul 09 19:53:38 CST 2019pool-1-thread-1
===========fixedRate 結(jié)束:Tue Jul 09 19:53:40 CST 2019pool-1-thread-1
===========fixedRate 開始:Tue Jul 09 19:53:40 CST 2019pool-1-thread-1
===========fixedRate 結(jié)束:Tue Jul 09 19:53:42 CST 2019pool-1-thread-1
===========fixedRate 開始:Tue Jul 09 19:53:42 CST 2019pool-1-thread-1
===========fixedRate 結(jié)束:Tue Jul 09 19:53:44 CST 2019pool-1-thread-1
===========fixedRate 開始:Tue Jul 09 19:53:44 CST 2019pool-1-thread-1
===========fixedRate 結(jié)束:Tue Jul 09 19:53:46 CST 2019pool-1-thread-1
===========fixedRate 開始:Tue Jul 09 19:53:46 CST 2019pool-1-thread-1
===========fixedRate 結(jié)束:Tue Jul 09 19:53:48 CST 2019pool-1-thread-1
fixedDelay 開始:Tue Jul 09 19:53:48 CST 2019pool-1-thread-1
fixedDelay 結(jié)束:Tue Jul 09 19:53:58 CST 2019pool-1-thread-1
=========================== ...>>cron....Tue Jul 09 19:53:58 CST 2019pool-1-thread-1

四、解決定時任務(wù)單線程運行的問題

@Configuration
@EnableScheduling
public class ScheduleConfig implements SchedulingConfigurer {
 
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.setScheduler(scheduledTaskExecutor());
    }
 
    @Bean
    public Executor scheduledTaskExecutor() {
        return Executors.newScheduledThreadPool(3); //指定線程池大小
    }
}

再次運行上面的程序,運行時間規(guī)律就符合期望了。

總結(jié)

到此這篇關(guān)于SpringBoot通過@Scheduled實現(xiàn)定時任務(wù)及單線程運行問題解決的文章就介紹到這了,更多相關(guān)SpringBoot @Scheduled實現(xiàn)定時任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MybatisPlus逆向工程的項目實踐

    MybatisPlus逆向工程的項目實踐

    Mybatis-Plus逆向工程,是MP官方提供的一款代碼生成器,可以自動生成對應的實體類、Mapper接口和配置文件,,本文主要介紹了MybatisPlus逆向工程的項目實踐,感興趣的可以了解一下
    2024-03-03
  • 使用Apache Ignite實現(xiàn)Java數(shù)據(jù)網(wǎng)格

    使用Apache Ignite實現(xiàn)Java數(shù)據(jù)網(wǎng)格

    今天我們來探討如何使用Apache Ignite來實現(xiàn)Java數(shù)據(jù)網(wǎng)格,Apache Ignite是一個高性能的內(nèi)存計算平臺,它提供了分布式緩存、數(shù)據(jù)網(wǎng)格和計算功能,可以顯著提高大規(guī)模應用的數(shù)據(jù)處理性能,感興趣的小伙伴跟著小編一起來看看吧
    2024-08-08
  • java優(yōu)化hibernate性能的幾點建議

    java優(yōu)化hibernate性能的幾點建議

    以上是在進行struts+hibernate+spring進行項目開發(fā)中,對hibernate性能優(yōu)化的幾點心得。
    2008-10-10
  • Mybatis下劃線駝峰處理的幾種方法

    Mybatis下劃線駝峰處理的幾種方法

    這篇文章主要講述Mybatis下劃線駝峰處理的幾種方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-12-12
  • java實現(xiàn)登錄驗證碼功能

    java實現(xiàn)登錄驗證碼功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)登錄驗證碼功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Flowable?設(shè)置任務(wù)處理人的四種方式詳解

    Flowable?設(shè)置任務(wù)處理人的四種方式詳解

    這篇文章主要為大家介紹了Flowable?設(shè)置任務(wù)處理人的四種方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 關(guān)于spring依賴注入的方式以及優(yōu)缺點

    關(guān)于spring依賴注入的方式以及優(yōu)缺點

    這篇文章主要介紹了關(guān)于spring依賴注入的方式以及優(yōu)缺點,依賴注入,是IOC的一個方面,是個通常的概念,它有多種解釋,這概念是說你不用創(chuàng)建對象,而只需要描述它如何被創(chuàng)建,需要的朋友可以參考下
    2023-07-07
  • SpringBoot 進行限流的操作方法

    SpringBoot 進行限流的操作方法

    限流是對某一時間窗口內(nèi)的請求數(shù)進行限制,保持系統(tǒng)的可用性和穩(wěn)定性,防止因流量暴增而導致的系統(tǒng)運行緩慢或宕機。本文重點給大家介紹SpringBoot 進行限流的操作方法,感興趣的朋友一起看看吧
    2021-10-10
  • 基于Java堆內(nèi)存的10個要點的總結(jié)分析

    基于Java堆內(nèi)存的10個要點的總結(jié)分析

    本篇文章是對Java堆內(nèi)存的10個要點進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Java SpringBoot攔截器詳解

    Java SpringBoot攔截器詳解

    這篇文章主要介紹了Java SpringBoot攔截器的使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-10-10

最新評論