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

