老生常談spring?boot中的定時(shí)任務(wù)
SpringBoot中的定時(shí)任務(wù)主要通過(guò)@Scheduled注解以及SchedulingConfigurer接口實(shí)現(xiàn)。
- @Scheduled注解是Spring提供的一個(gè)注解,用于標(biāo)記方法作為定時(shí)任務(wù)執(zhí)行:配置方法在指定的時(shí)間間隔或時(shí)間點(diǎn)執(zhí)行,實(shí)現(xiàn)各種定時(shí)任務(wù)需求。
//在你需要定時(shí)的方法上加上@Scheduled注解,并用corn表達(dá)式指定如何定時(shí),下式表達(dá)了每隔15秒執(zhí)行一次方法 @Scheduled(cron = "*/15 * * * * ?") public void hello() { System.out.println("hello執(zhí)行了"); }
但是要記得在啟動(dòng)類上開(kāi)啟定時(shí)功能:@EnableScheduling // 開(kāi)啟定時(shí)任務(wù)功能
@Scheduled任務(wù)在單線程環(huán)境下執(zhí)行,可能出現(xiàn)任務(wù)堆積的情況,尤其在任務(wù)量大或任務(wù)執(zhí)行時(shí)間長(zhǎng)的情況下,而且這些任務(wù)可能會(huì)變得混亂和難以管理。定時(shí)任務(wù)的配置分散在各個(gè)任務(wù)方法中,不利于統(tǒng)一管理和維護(hù)。對(duì)于需要根據(jù)動(dòng)態(tài)條件創(chuàng)建或銷毀定時(shí)任務(wù)的情況,@Scheduled注解也無(wú)法滿足需求。
- 使用SchedulingConfigurer接口來(lái)動(dòng)態(tài)地創(chuàng)建和管理定時(shí)任務(wù)。通過(guò)實(shí)現(xiàn) SchedulingConfigurer 接口,我們可以編寫(xiě)代碼來(lái)動(dòng)態(tài)地注冊(cè)和管理定時(shí)任務(wù),從而實(shí)現(xiàn)靈活的任務(wù)調(diào)度需求。SchedulingConfigurer 接口是 Spring 提供的一個(gè)用于定時(shí)任務(wù)配置的擴(kuò)展接口,它允許開(kāi)發(fā)人員更細(xì)粒度地控制定時(shí)任務(wù)的執(zhí)行。通過(guò)實(shí)現(xiàn)SchedulingConfigurer接口,可以自定義任務(wù)調(diào)度器(TaskScheduler),配置線程池等參數(shù),以滿足不同場(chǎng)景下的定時(shí)任務(wù)需求。
@Configuration @EnableScheduling public class CustomSchedulingConfig implements SchedulingConfigurer { @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { // 定時(shí)任務(wù)邏輯 } }
- 通過(guò)實(shí)現(xiàn)SchedulingConfigurer接口,重寫(xiě)configureTasks方法,自定義任務(wù)調(diào)度器的配置。此外我們還可以配置線程池,用于控制定時(shí)任務(wù)執(zhí)行時(shí)的線程數(shù)量、并發(fā)性等參數(shù)。
@Bean(destroyMethod = "shutdown") public ThreadPoolTaskScheduler threadPoolTaskScheduler() { ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); scheduler.setPoolSize(5); // 設(shè)置線程池大小 scheduler.setThreadNamePrefix("scheduled-task-"); // 設(shè)置線程名稱前綴 scheduler.setAwaitTerminationSeconds(60); // 設(shè)置終止等待時(shí)間 // 設(shè)置處理拒絕執(zhí)行的任務(wù)異常 scheduler.setRejectedExecutionHandler((r, executor) -> log.error("Task rejected", r)); // 處理定時(shí)任務(wù)執(zhí)行過(guò)程中拋出的未捕獲異常 scheduler.setErrorHandler(e -> log.error("Error in scheduled task", e)); return scheduler; } //然后將自定義的ThreadPoolTaskScheduler設(shè)置到ScheduledTaskRegistrar中去: @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { // 定時(shí)任務(wù)邏輯 taskRegistrar.setTaskScheduler(threadPoolTaskScheduler()); } //通過(guò)SchedulingConfigurer接口,可以更靈活地配置任務(wù)調(diào)度器和定時(shí)任務(wù)的執(zhí)行規(guī)則,比如動(dòng)態(tài)注冊(cè)定時(shí)任務(wù)、動(dòng)態(tài)修改任務(wù)執(zhí)行規(guī)則等。
到此這篇關(guān)于spring boot中的定時(shí)任務(wù)的文章就介紹到這了,更多相關(guān)spring boot定時(shí)任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Visual?Studio?Code配置Tomcat運(yùn)行Java?Web項(xiàng)目詳細(xì)步驟
VS Code是一款非常棒的文本編輯器,具有配置簡(jiǎn)單、功能豐富、輕量簡(jiǎn)潔的特點(diǎn),并且極其適合處理中小規(guī)模的代碼,這篇文章主要給大家介紹了關(guān)于Visual?Studio?Code配置Tomcat運(yùn)行Java?Web項(xiàng)目的詳細(xì)步驟,需要的朋友可以參考下2023-11-11java8中定時(shí)任務(wù)最佳實(shí)現(xiàn)方式(實(shí)現(xiàn)原理)
這篇文章主要介紹了java8中定時(shí)任務(wù)最佳實(shí)現(xiàn)方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-12-12SpringBoot使用Redis的zset統(tǒng)計(jì)在線用戶信息
這篇文章主要介紹了SpringBoot使用Redis的zset統(tǒng)計(jì)在線用戶信息,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot框架,感興趣的朋友可以了解下2021-04-04JAVA8妙用Optional解決判斷Null為空的問(wèn)題方法
本文主要介紹了JAVA8妙用Optional解決判斷Null為空的問(wèn)題方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10Maven將代碼及依賴打成一個(gè)Jar包的方式詳解(最新推薦)
這篇文章主要介紹了Maven將代碼及依賴打成一個(gè)Jar包的方式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05springboot log4j2不能打印框架錯(cuò)誤日志的解決方案
這篇文章主要介紹了springboot log4j2不能打印框架錯(cuò)誤日志的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08SpringBoot集成netty實(shí)現(xiàn)websocket通信功能
Netty是一個(gè)高性能、異步事件驅(qū)動(dòng)的網(wǎng)絡(luò)應(yīng)用框架,用于快速開(kāi)發(fā)可維護(hù)的高性能協(xié)議服務(wù)器和客戶端,WebSocket 是一種網(wǎng)絡(luò)通信協(xié)議,相比傳統(tǒng)的HTTP協(xié)議,本文給大家介紹了SpringBoot集成netty實(shí)現(xiàn)websocket通信功能,需要的朋友可以參考下2024-03-03Spring中@Import的各種用法以及ImportAware接口詳解
這篇文章主要介紹了Spring中@Import的各種用法以及ImportAware接口詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10