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

Spring @Scheduled的坑及解決

 更新時(shí)間:2024年08月02日 10:56:12   作者:虎哥和你一起學(xué)編程  
這篇文章主要介紹了Spring @Scheduled的坑及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Spring @Scheduled的坑

spring的定時(shí)任務(wù)有兩個(gè)坑

1.單線程執(zhí)行,多個(gè)定時(shí)任務(wù)不能同時(shí)執(zhí)行

2.如果當(dāng)前定時(shí)任務(wù)還沒(méi)有結(jié)束,那么下一次定時(shí)任務(wù)的時(shí)間到了也不會(huì)觸發(fā)。

解決辦法

加上@EnableAsync注解

@Scheduled 定時(shí)任務(wù)不執(zhí)行

排查代碼中添加的定時(shí)任務(wù)步驟是否正確

  • 啟動(dòng)類上加 @EnableScheduling 注解
  • 定時(shí)任務(wù)類上加@Component
  • 定時(shí)方法上加@Scheduled
  @Scheduled(cron = "0 19 16 * * ?")
    public void cron() {
        log.info("定時(shí)任務(wù)開啟:---");
    }

排查是否任務(wù)阻塞,如果定時(shí)任務(wù)出現(xiàn)異常阻塞后,將不會(huì)在次執(zhí)行

解決:進(jìn)行try…catch異常拋出

java中多個(gè)@Scheduled定時(shí)器不執(zhí)行

原因是:

@Scheduled注解會(huì)在默認(rèn)情況下以單線程的方式執(zhí)行定時(shí)任務(wù)。

這個(gè)“單線程”指兩個(gè)方面:

  • 如果一個(gè)定時(shí)任務(wù)執(zhí)行時(shí)間大于其任務(wù)間隔時(shí)間,那么下一次將會(huì)等待上一次執(zhí)行結(jié)束后再繼續(xù)執(zhí)行。
  • 如果多個(gè)定時(shí)任務(wù)在同一時(shí)刻執(zhí)行,任務(wù)會(huì)依次執(zhí)行。

為了讓@Scheduled效率更高,我們可以通過(guò)兩種方法將定時(shí)任務(wù)變成多線程執(zhí)行:

方法1、在啟動(dòng)類中配置TaskScheduler線程池大?。?/strong>

public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(10);//不配置默認(rèn)是1
return taskScheduler;
}

方法2、利用Spring提供的@Async注解和@EnableAsync注解

@Component
@EnableAsync //開啟異步支持
public class TimedTask{
@Async // 對(duì)某個(gè)方法進(jìn)行異步執(zhí)行
@Scheduled(initialDelay = 1,fixedDelay=10000)//initialDelay 在容器啟動(dòng)后,延遲1毫秒再執(zhí)行一次定時(shí)器
public void aa() {
//執(zhí)行業(yè)務(wù)邏輯
}

@Async
@Scheduled(initialDelay = 1,fixedDelay=10000)//fixedDelay  以上一次方法執(zhí)行完開始算起,如上一次方法執(zhí)行阻塞住了,那么直到上一次執(zhí)行完,并間隔給定的時(shí)間后,執(zhí)行下一次
public void bb() {
//執(zhí)行業(yè)務(wù)邏輯
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于Java反射機(jī)制 你需要知道的事情

    關(guān)于Java反射機(jī)制 你需要知道的事情

    這篇文章主要介紹了Java反射機(jī)制的相關(guān)內(nèi)容,涉及了class類的動(dòng)態(tài)加載,獲取成員變量、構(gòu)造函數(shù)信息等信息,需要的朋友可以參考下。
    2017-09-09
  • 如何調(diào)用chatGPT實(shí)現(xiàn)代碼機(jī)器人

    如何調(diào)用chatGPT實(shí)現(xiàn)代碼機(jī)器人

    最近c(diǎn)hatGPT也是非常的火爆,相信大家都看到了,現(xiàn)在提供一種Java調(diào)用chatGPT的方法,我們主要通過(guò)兩個(gè)工具來(lái)實(shí)現(xiàn),一就是httpclient,二就是hutool,你覺(jué)得那種好理解你就用那種即可,今天通過(guò)本文給大家分享調(diào)用chatGPT實(shí)現(xiàn)代碼機(jī)器人,感興趣的朋友一起看看吧
    2022-12-12
  • Java中判斷對(duì)象是否為空的方法的詳解

    Java中判斷對(duì)象是否為空的方法的詳解

    這篇文章主要介紹了Java中判斷對(duì)象是否為空的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • java 中動(dòng)態(tài)代理(JDK,cglib)實(shí)例代碼

    java 中動(dòng)態(tài)代理(JDK,cglib)實(shí)例代碼

    這篇文章主要介紹了java 中動(dòng)態(tài)代理,這里介紹了JDK 動(dòng)態(tài)代理與 cglib 動(dòng)態(tài)代理的相關(guān)資料
    2017-04-04
  • SpringBoot中swagger的使用

    SpringBoot中swagger的使用

    這篇文章主要介紹了SpringBoot中swagger的使用,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)swagger的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • Spring Boot中RabbitMQ自動(dòng)配置的介紹、原理和使用方法

    Spring Boot中RabbitMQ自動(dòng)配置的介紹、原理和使用方法

    本文介紹了Spring Boot中RabbitMQ自動(dòng)配置的介紹、原理和使用方法,通過(guò)本文的介紹,我們希望讀者能夠更好地理解Spring Boot中RabbitMQ的使用方法,并在項(xiàng)目中更加靈活地應(yīng)用,感興趣的朋友跟隨小編一起看看吧
    2023-07-07
  • 初識(shí)Spring boot監(jiān)控

    初識(shí)Spring boot監(jiān)控

    這篇文章主要介紹了spring boot監(jiān)控的相關(guān)知識(shí),文中給大家介紹了查看監(jiān)控?cái)?shù)據(jù),數(shù)據(jù)可視化的相關(guān)知識(shí),需要的朋友可以參考下
    2018-03-03
  • idea提交文件時(shí)如何忽略某些文件的提交

    idea提交文件時(shí)如何忽略某些文件的提交

    這篇文章主要介紹了idea提交文件時(shí)如何忽略某些文件的提交問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 談?wù)刯ava的concurrent用法

    談?wù)刯ava的concurrent用法

    這篇文章給大家介紹java的concurrent用法,感興趣的朋友一起學(xué)習(xí)吧
    2015-10-10
  • Java后端傳時(shí)間戳給前端的三種方式

    Java后端傳時(shí)間戳給前端的三種方式

    時(shí)間戳是一份能夠表示一份數(shù)據(jù)在一個(gè)特定時(shí)間點(diǎn)已經(jīng)存在的完整的可驗(yàn)證的數(shù)據(jù),本文給大家介紹了Java后端傳時(shí)間戳給前端的三種方式,并通過(guò)代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-12-12

最新評(píng)論