最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

問題描述

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

原因分析

用能要交給spring容器的注解

比如@Component注解。

使用@EnableScheduling

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

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

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

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

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

正常寫法:@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é)束后才開始cron表達(dá)式時(shí)間匹配

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

很多人明明在方法在添加了@Scheduled注解,但是不生效都是這個(gè)原因,定時(shí)任務(wù)所在類沒有被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í)行來說,定時(shí)任務(wù)方法頭部增加@Async即可實(shí)現(xiàn)并發(fā)執(zhí)行,也就是嚴(yán)格按照cron表達(dá)式進(jìn)行時(shí)間匹配執(zhí)行,無需等待上一次任務(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ù)線程池的長度設(shè)置為大于定時(shí)任務(wù)個(gè)數(shù)的值。然后ThreadPoolTaskScheduler默認(rèn)長度為1。所以默認(rèn)只有一個(gè)定時(shí)任務(wù)在跑。

源碼如下:



所以,需要將ThreadPoolTaskScheduler的長度修改即可,在項(xiàng)目啟動(dòng)時(shí),設(shè)置長度,替換原本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)文章

  • 使用Java連接WMI獲取系統(tǒng)信息的方法

    使用Java連接WMI獲取系統(tǒng)信息的方法

    在 Windows 系統(tǒng)上,WMI是一套管理數(shù)據(jù)和操作系統(tǒng)組件的基礎(chǔ)設(shè)施,能讓應(yīng)用程序查詢系統(tǒng)信息、監(jiān)控硬件狀態(tài)以及管理系統(tǒng)配置,本項(xiàng)目旨在講解如何通過 Java 連接 WMI 獲取系統(tǒng)信息,需要的朋友可以參考下
    2025-03-03
  • Spring中使用Async進(jìn)行異步功能開發(fā)實(shí)戰(zhàn)示例(大文件上傳為例)

    Spring中使用Async進(jìn)行異步功能開發(fā)實(shí)戰(zhàn)示例(大文件上傳為例)

    本文以大文件上傳為例,首先講解在未進(jìn)行程序異步化時(shí),程序的運(yùn)行機(jī)制和具體表現(xiàn),然后講解如何進(jìn)行異步化的改造,讓程序進(jìn)行異步執(zhí)行,通過本文不僅能讓你掌握如何進(jìn)行Event的事件開發(fā),同時(shí)還能掌握在Spring中如何進(jìn)行異步開發(fā),熟悉@Async的具體用法,感興趣的朋友一起看看吧
    2024-08-08
  • 詳解java CountDownLatch和CyclicBarrier在內(nèi)部實(shí)現(xiàn)和場景上的區(qū)別

    詳解java CountDownLatch和CyclicBarrier在內(nèi)部實(shí)現(xiàn)和場景上的區(qū)別

    這篇文章主要介紹了詳解java CountDownLatch和CyclicBarrier在內(nèi)部實(shí)現(xiàn)和場景上的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 一文帶你了解Spring中@Enable開頭注解的使用

    一文帶你了解Spring中@Enable開頭注解的使用

    前面的文章給大家介紹?Spring?的重試機(jī)制的時(shí)候有提到過?Spring?有很多?@Enable?開頭的注解,平時(shí)在使用的時(shí)候也沒有注意過為什么會(huì)有這些注解,今天就給大家介紹一下
    2022-09-09
  • json如何解析混合數(shù)組對(duì)象到實(shí)體類的list集合里去

    json如何解析混合數(shù)組對(duì)象到實(shí)體類的list集合里去

    這篇文章主要介紹了json解析混合數(shù)組對(duì)象到實(shí)體類的list集合里去的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • mybatis一對(duì)多兩種mapper寫法實(shí)例

    mybatis一對(duì)多兩種mapper寫法實(shí)例

    這篇文章主要介紹了mybatis一對(duì)多兩種mapper寫法實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Spring Cloud中關(guān)于Feign的常見問題總結(jié)

    Spring Cloud中關(guān)于Feign的常見問題總結(jié)

    這篇文章主要給大家介紹了Spring Cloud中關(guān)于Feign的常見問題,文中通過示例代碼介紹的很詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • MybatisPlus修改時(shí)空字段無法修改的解決方案

    MybatisPlus修改時(shí)空字段無法修改的解決方案

    這篇文章主要介紹了MybatisPlus修改時(shí)空字段無法修改的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • JDK17前后寫法超詳細(xì)對(duì)比(差點(diǎn)沒認(rèn)出是Java)

    JDK17前后寫法超詳細(xì)對(duì)比(差點(diǎn)沒認(rèn)出是Java)

    在實(shí)際應(yīng)用中,開發(fā)人員可以根據(jù)項(xiàng)目需求選擇合適的JDK版本,例如,對(duì)于需要高運(yùn)行效率和低延遲的應(yīng)用,可以選擇最新版本的JDK,以便獲得更好的性能和特性支持,這篇文章主要介紹了JDK17前后寫法超詳細(xì)對(duì)比的相關(guān)資料,需要的朋友可以參考下
    2026-04-04
  • Spring中ApplicationEvent事件機(jī)制源碼詳解

    Spring中ApplicationEvent事件機(jī)制源碼詳解

    這篇文章主要介紹了Spring中ApplicationEvent事件機(jī)制源碼詳解,Spring中與事件有關(guān)的接口和類主要包括ApplicationEvent、ApplicationListener,下面來看一下Spring中事件的具體應(yīng)用,需要的朋友可以參考下
    2023-09-09

最新評(píng)論

都兰县| 平果县| 韶山市| 会宁县| 桦甸市| 安国市| 尼木县| 凤台县| 寻甸| 余干县| 牡丹江市| 密云县| 屏东县| 定安县| 济源市| 华蓥市| 东台市| 辰溪县| 通海县| 喀喇沁旗| 昭平县| 靖远县| 石河子市| 北流市| 高陵县| 宁安市| 嘉鱼县| 镇宁| 松溪县| 荔波县| 丰原市| 芜湖县| 阳信县| 莱西市| 肃南| 墨江| 泸西县| 潼关县| 咸宁市| 七台河市| 陵川县|