老生常談spring?boot中的定時(shí)任務(wù)
SpringBoot中的定時(shí)任務(wù)主要通過@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)類上開啟定時(shí)功能:@EnableScheduling // 開啟定時(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接口來動(dòng)態(tài)地創(chuàng)建和管理定時(shí)任務(wù)。通過實(shí)現(xiàn) SchedulingConfigurer 接口,我們可以編寫代碼來動(dòng)態(tài)地注冊(cè)和管理定時(shí)任務(wù),從而實(shí)現(xiàn)靈活的任務(wù)調(diào)度需求。SchedulingConfigurer 接口是 Spring 提供的一個(gè)用于定時(shí)任務(wù)配置的擴(kuò)展接口,它允許開發(fā)人員更細(xì)粒度地控制定時(shí)任務(wù)的執(zhí)行。通過實(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ù)邏輯
}
}- 通過實(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ī)則,比如動(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)文章
javaCV開發(fā)詳解之推流器和錄制器的實(shí)現(xiàn)
這篇文章主要介紹了javaCV開發(fā)詳解之推流器和錄制器實(shí)現(xiàn),對(duì)JavaCV感興趣的同學(xué),可以參考下2021-04-04
springboot項(xiàng)目中引入本地依賴jar包并打包到lib文件夾中
這篇文章主要介紹了springboot項(xiàng)目中引入本地依賴jar包,如何打包到lib文件夾中,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
老生常談foreach(增強(qiáng)for循環(huán))和for的區(qū)別
下面小編就為大家?guī)硪黄仙U刦oreach(增強(qiáng)for循環(huán))和for的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
使用java springboot設(shè)計(jì)實(shí)現(xiàn)的圖書管理系統(tǒng)(建議收藏)
這篇文章主要介紹了使用java springboot設(shè)計(jì)實(shí)現(xiàn)的圖書管理系統(tǒng),包含了整個(gè)的開發(fā)過程,以及過程中遇到的問題和解決方法,對(duì)大家的學(xué)習(xí)和工作具有借鑒意義,建議收藏一下2021-08-08
SpringBoot啟動(dòng)項(xiàng)目時(shí)實(shí)現(xiàn)加載緩存
在SpringBoot項(xiàng)目啟動(dòng)時(shí)執(zhí)行初始化工作有多種方法,包括使用@PostConstruct注解、實(shí)現(xiàn)ApplicationRunner或CommandLineRunner接口,以及監(jiān)聽Spring的生命周期事件,每種方法都有其適用場(chǎng)景和優(yōu)勢(shì),可以根據(jù)具體需求選擇合適的方法2026-02-02
IDEA斷點(diǎn)調(diào)試,斷點(diǎn)不起作用的解決
這篇文章主要介紹了IDEA斷點(diǎn)調(diào)試,斷點(diǎn)不起作用的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03

