springboot項(xiàng)目使用SchedulingConfigurer實(shí)現(xiàn)多個(gè)定時(shí)任務(wù)的案例代碼
一、引入依賴
pom文件引入依賴包
<!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!--hutool插件--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.7</version> </dependency>
二、配置文件屬性配置
application.yml配置文件配置
upload: #每天幾點(diǎn)幾分執(zhí)行 taskOnecron: 0 47 21 ? * * #每2分鐘執(zhí)行一次 taskTwocron: 0 0/2 * * * ?
三、代碼目錄結(jié)構(gòu)
目錄結(jié)構(gòu)如下圖:
四、示例代碼
4.1、定義 定時(shí)任務(wù)基礎(chǔ)接口
定時(shí)任務(wù)基礎(chǔ)接口 代碼示例
package com.xz.jdk11.schedule; /** * @author xz * @description 定義 定時(shí)任務(wù)基礎(chǔ)接口 */ public interface BaskTask extends Runnable{ //獲取執(zhí)行頻率 String getCron(); //執(zhí)行任務(wù)邏輯 void execute(); }
4.2、定義 定時(shí)任務(wù)一(每天幾點(diǎn)幾分執(zhí)行)
定時(shí)任務(wù)一(每天幾點(diǎn)幾分執(zhí)行) 代碼示例
package com.xz.jdk11.schedule; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.Calendar; /** * @author xz * @description 定時(shí)任務(wù)一(每天幾點(diǎn)幾分執(zhí)行) */ @Slf4j @Component public class TaskOne implements BaskTask{ @Value("${upload.taskOnecron}") private String taskOnecron; @Override public String getCron() { return taskOnecron; } @Override public void execute() { log.info("定時(shí)任務(wù)一(每天幾點(diǎn)幾分執(zhí)行一次),執(zhí)行開始時(shí)間:{}",Calendar.getInstance().getTime()); } @Override public void run() { execute(); } }
4.3、定義 定時(shí)任務(wù)二(每幾分鐘執(zhí)行一次)
定時(shí)任務(wù)二(每幾分鐘執(zhí)行一次) 代碼示例
package com.xz.jdk11.schedule; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.Calendar; /** * @author xz * @description 定時(shí)任務(wù)二(每幾分鐘執(zhí)行一次) */ @Slf4j @Component public class TaskTwo implements BaskTask{ @Value("${upload.taskTwocron}") private String taskTwocron; @Override public String getCron() { return taskTwocron; } @Override public void execute() { log.info("定時(shí)任務(wù)二:每幾分鐘執(zhí)行一次,執(zhí)行開始時(shí)間:{}", Calendar.getInstance().getTime()); } @Override public void run() { execute(); } }
4.4、定義 定時(shí)任務(wù)注冊器
定時(shí)任務(wù)注冊器 代碼示例
package com.xz.jdk11.schedule; import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import org.springframework.scheduling.support.CronTrigger; import java.util.Map; /** * @author xz * @description 定時(shí)任務(wù)注冊器 */ @EnableScheduling @Configuration @Slf4j public class ReUploadTask implements SchedulingConfigurer { @Autowired private ApplicationContext applicationContext; @Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { //在注冊器添加定時(shí)任務(wù)前,添加線程池 ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); threadPoolTaskScheduler.setPoolSize(10); threadPoolTaskScheduler.initialize(); scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler); //獲取所有的定時(shí)任務(wù) Map<String,BaskTask> map=applicationContext.getBeansOfType(BaskTask.class); //遍歷注冊 for(String key:map.keySet()){ BaskTask baskTask = map.get(key); scheduledTaskRegistrar.addTriggerTask( baskTask,triggerContext -> { if(StrUtil.isBlank(baskTask.getCron())){ return null; } return new CronTrigger(baskTask.getCron()).nextExecutionTime(triggerContext); } ); } } }
4.5、運(yùn)行springboot項(xiàng)目查看輸出結(jié)果
輸出結(jié)果如下所示:
到此這篇關(guān)于springboot項(xiàng)目使用SchedulingConfigurer實(shí)現(xiàn)多個(gè)定時(shí)任務(wù)的文章就介紹到這了,更多相關(guān)springboot多個(gè)定時(shí)任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springboot定時(shí)任務(wù)SchedulingConfigurer異步多線程實(shí)現(xiàn)方式
- springboot通過SchedulingConfigurer實(shí)現(xiàn)多定時(shí)任務(wù)注冊及動(dòng)態(tài)修改執(zhí)行周期(示例詳解)
- SpringBoot使用SchedulingConfigurer實(shí)現(xiàn)多個(gè)定時(shí)任務(wù)多機(jī)器部署問題(推薦)
- Spring中利用SchedulingConfigurer實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)配置的示例
相關(guān)文章
Java+EasyExcel實(shí)現(xiàn)文件上傳功能
這篇文章主要為大家詳細(xì)介紹了如何通過Java和EasyExcel實(shí)現(xiàn)文件上傳功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-02-02詳解Spring AOP自定義可重復(fù)注解沒有生效問題
本文主要介紹了Spring AOP自定義可重復(fù)注解沒有生效問題,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08Java怎么獲取當(dāng)前時(shí)間、計(jì)算程序運(yùn)行時(shí)間源碼詳解(超詳細(xì)!)
有的時(shí)候,我們需要查看某一段代碼的性能如何,最為簡單的方式,可以通過計(jì)算該段代碼執(zhí)行的耗時(shí),來進(jìn)行簡單的判斷,這篇文章主要給大家介紹了關(guān)于Java怎么獲取當(dāng)前時(shí)間、計(jì)算程序運(yùn)行時(shí)間的相關(guān)資料,需要的朋友可以參考下2024-07-07SpringMVC實(shí)現(xiàn)controller中獲取session的實(shí)例代碼
本篇文章主要介紹了SpringMVC實(shí)現(xiàn)controller中獲取session的實(shí)例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-02-02IDEA與模擬器安裝調(diào)試失敗的處理方法:INSTALL_PARSE_FAILED_NO_CERTIFICATES
這篇文章主要介紹了IDEA與模擬器安裝調(diào)試失敗的處理方法:INSTALL_PARSE_FAILED_NO_CERTIFICATES,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09SpringBoot打War包上傳到阿里云的LINUX服務(wù)器的操作方法
這篇文章主要介紹了SpringBoot打War包上傳到阿里云的LINUX服務(wù)器,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02