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