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

定時(shí)任務(wù)注解@Scheduled不生效問(wèn)題及解決

 更新時(shí)間:2023年06月12日 16:49:06   作者:JobsTribe  
這篇文章主要介紹了定時(shí)任務(wù)注解@Scheduled不生效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

定時(shí)任務(wù)注解@Scheduled不生效

問(wèn)題描述

在用@Scheduled做定時(shí)任務(wù)的注解時(shí),發(fā)現(xiàn)@Scheduled注解不生效。

原因分析

用能要交給spring容器的注解

比如@Component注解。

使用@EnableScheduling

啟動(dòng)類里面/使用定時(shí)任務(wù)所在的類中使用@EnableScheduling 注解開(kāi)啟功能,自動(dòng)掃描

cron表達(dá)式寫(xiě)法不對(duì)

正常寫(xiě)法:@Scheduled(cron="*/10 * * * * ?")

代表10s執(zhí)行一次,每個(gè)對(duì)應(yīng)的是秒 分 時(shí) 天

如果是想每天0:30執(zhí)行一次,那就是:

正常寫(xiě)法:@Scheduled(cron=“0 30 0 * * ?”)

使用apollo添加配置后,apollo修改配置后不生效

在使用@Scheduled時(shí),項(xiàng)目啟動(dòng)時(shí)已將時(shí)間注入Spring容器中。

相當(dāng)于就算是apollo改了內(nèi)容有熱加載機(jī)制,值也不會(huì)生效。

如果想生效,需要重啟服務(wù)。

@Scheduled實(shí)現(xiàn)定時(shí)任務(wù)(實(shí)現(xiàn)多個(gè)定時(shí)任務(wù)并發(fā)執(zhí)行)

@Scheduled實(shí)現(xiàn)定時(shí)任務(wù)

使用@Scheduled注解需要springboot啟動(dòng)類上添加注解@EnableScheduling

@SpringBootApplication
@MapperScan(basePackages = {"com.xxx.*.mapper"})
@EnableScheduling
public class PictureProcessingAdminApplication{
	public static void main(String[] args) {
		SpringApplication.run(PictureProcessingAdminApplication.class, args);
	}
}

同個(gè)任務(wù)的同步執(zhí)行

同步執(zhí)行:等待上一次定時(shí)任務(wù)結(jié)束后才開(kāi)始cron表達(dá)式時(shí)間匹配

注意:同步任務(wù)所在類必須被spring掃描所管理才行,所以需要添加@Component注解。

很多人明明在方法在添加了@Scheduled注解,但是不生效都是這個(gè)原因,定時(shí)任務(wù)所在類沒(méi)有被spring管理。

@Component
public class taskTest {
    @Scheduled(cron = "0 */1 * * * ?")
    public void task1(){
        try {
            System.out.println("任務(wù)1執(zhí)行:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis())));
            Thread.sleep(65000);
            System.out.println("任務(wù)1結(jié)束:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis())));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

同個(gè)任務(wù)的并發(fā)執(zhí)行

相對(duì)同步執(zhí)行來(lái)說(shuō),定時(shí)任務(wù)方法頭部增加@Async即可實(shí)現(xiàn)并發(fā)執(zhí)行,也就是嚴(yán)格按照cron表達(dá)式進(jìn)行時(shí)間匹配執(zhí)行,無(wú)需等待上一次任務(wù)執(zhí)行結(jié)束。

@Component
public class taskTest {
    @Async
    @Scheduled(cron = "0 */1 * * * ?")
    public void task1(){
        try {
            System.out.println("任務(wù)1執(zhí)行:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis())));
            Thread.sleep(65000);
            System.out.println("任務(wù)1結(jié)束:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis())));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

多個(gè)任務(wù)的同步執(zhí)行

任務(wù)使用@Scheduled

然后最重要的是,需要將springboot維護(hù)的ThreadPoolTaskScheduler定時(shí)任務(wù)線程池的長(zhǎng)度設(shè)置為大于定時(shí)任務(wù)個(gè)數(shù)的值。然后ThreadPoolTaskScheduler默認(rèn)長(zhǎng)度為1。所以默認(rèn)只有一個(gè)定時(shí)任務(wù)在跑。

源碼如下:



所以,需要將ThreadPoolTaskScheduler的長(zhǎng)度修改即可,在項(xiàng)目啟動(dòng)時(shí),設(shè)置長(zhǎng)度,替換原本springboot管理的bean即可。

@Component
public class TaskSchedulerConfig {
	@Bean
	public ThreadPoolTaskScheduler threadPoolTaskScheduler(){
		ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
		threadPoolTaskScheduler.setPoolSize(10);
		return threadPoolTaskScheduler;
	}
}

總結(jié)

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

相關(guān)文章

  • SpringSecurity HttpSecurity 類處理流程分析

    SpringSecurity HttpSecurity 類處理流程分析

    SpringSecurity在SSM項(xiàng)目中使用基于配置文件,通過(guò)XML標(biāo)簽定義認(rèn)證信息,HttpSecurity在SpringBoot中通過(guò)代碼配置實(shí)現(xiàn)與XML相同功能,詳細(xì)介紹了HttpSecurity的類結(jié)構(gòu)、處理過(guò)程及其與SecurityBuilder的關(guān)系,感興趣的朋友一起看看吧
    2024-09-09
  • 整理總結(jié)Java多線程程序編寫(xiě)的要點(diǎn)

    整理總結(jié)Java多線程程序編寫(xiě)的要點(diǎn)

    這篇文章主要介紹了Java多線程程序編寫(xiě)的要點(diǎn),包括線程的狀態(tài)控制和優(yōu)先級(jí)以及線程的通信問(wèn)題等方面,非常之全面!需要的朋友可以參考下
    2016-01-01
  • Java數(shù)字簽名算法DSA實(shí)例詳解

    Java數(shù)字簽名算法DSA實(shí)例詳解

    這篇文章主要介紹了Java數(shù)字簽名算法DSA,結(jié)合實(shí)例形式分析了Java數(shù)字簽名算法DSA具體定義與使用技巧,需要的朋友可以參考下
    2018-05-05
  • 使用Java進(jìn)行FreeMarker的web模板開(kāi)發(fā)的基礎(chǔ)教程

    使用Java進(jìn)行FreeMarker的web模板開(kāi)發(fā)的基礎(chǔ)教程

    這篇文章主要介紹了使用Java進(jìn)行FreeMarker模板引擎開(kāi)發(fā)的基礎(chǔ)教程,文中針對(duì)FreeMarker的網(wǎng)頁(yè)標(biāo)簽用法給出了一些例子,需要的朋友可以參考下
    2016-03-03
  • Java運(yùn)用SWT插件編寫(xiě)桌面記事本應(yīng)用程序

    Java運(yùn)用SWT插件編寫(xiě)桌面記事本應(yīng)用程序

    這篇文章主要為大家介紹了一個(gè)Java項(xiàng)目實(shí)戰(zhàn),一步步教你實(shí)現(xiàn)記事本,步驟很詳細(xì),運(yùn)用SWT插件手把手編寫(xiě)記事本,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Java如何批量執(zhí)行datax腳本

    Java如何批量執(zhí)行datax腳本

    這篇文章主要介紹了Java如何批量執(zhí)行datax腳本問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • SpringBoot調(diào)用第三方接口的幾種方式小結(jié)

    SpringBoot調(diào)用第三方接口的幾種方式小結(jié)

    在項(xiàng)目中調(diào)用第三方接口時(shí),確實(shí)需要根據(jù)項(xiàng)目的技術(shù)棧、架構(gòu)規(guī)范以及具體的業(yè)務(wù)需求來(lái)選擇最適合的調(diào)用方式,下面我們就介紹幾種調(diào)用第三方接口的實(shí)現(xiàn)方式以及代碼示例,需要的朋友可以參考下
    2024-07-07
  • Java中使用數(shù)組實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)實(shí)例

    Java中使用數(shù)組實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)實(shí)例

    這篇文章主要介紹了Java中使用數(shù)組實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)實(shí)例,本文先是講解了實(shí)現(xiàn)棧至少應(yīng)該包括以下幾個(gè)方法等知識(shí),然后給出代碼實(shí)例,需要的朋友可以參考下
    2015-01-01
  • Java中的LinkedList底層源碼分析

    Java中的LinkedList底層源碼分析

    這篇文章主要介紹了Java中的LinkedList底層源碼分析,底層基于雙向鏈表,往LinkedList中間插入元素時(shí),不需要移動(dòng)大量的元素,只需要修改前后節(jié)點(diǎn)的指針,速度快,需要的朋友可以參考下
    2023-12-12
  • java編寫(xiě)汽車租賃系統(tǒng)

    java編寫(xiě)汽車租賃系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java編寫(xiě)汽車租賃系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評(píng)論