SpringBoot之解決多個(gè)定時(shí)任務(wù)阻塞的問(wèn)題
SpringBoot解決多個(gè)定時(shí)任務(wù)阻塞
這篇文章介紹一下Spring Boot 中如何開(kāi)啟多線(xiàn)程定時(shí)任務(wù)?
為什么Spring Boot 定時(shí)任務(wù)是單線(xiàn)程的?
想要解釋為什么,一定要從源碼入手,直接從@EnableScheduling這個(gè)注解入手,找到了這個(gè)ScheduledTaskRegistrar類(lèi),其中有一段代碼如下:
protected void scheduleTasks() {
if (this.taskScheduler == null) {
this.localExecutor = Executors.newSingleThreadScheduledExecutor();
this.taskScheduler = new ConcurrentTaskScheduler(this.localExecutor);
}
}如果taskScheduler為null,則創(chuàng)建單線(xiàn)程的線(xiàn)程池:Executors.newSingleThreadScheduledExecutor()。
多線(xiàn)程定時(shí)任務(wù)如何配置?
下面介紹三種方案配置多線(xiàn)程下的定時(shí)任務(wù)。
1、重寫(xiě)SchedulingConfigurer#configureTasks()
直接實(shí)現(xiàn)SchedulingConfigurer這個(gè)接口,設(shè)置taskScheduler,代碼如下:
@Configuration
public class ScheduleConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
//設(shè)定一個(gè)長(zhǎng)度10的定時(shí)任務(wù)線(xiàn)程池
taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
}
}2、通過(guò)配置開(kāi)啟
Spring Boot quartz 已經(jīng)提供了一個(gè)配置用來(lái)配置線(xiàn)程池的大小,如下;
spring.task.scheduling.pool.size=10
只需要在配置文件中添加如上的配置即可生效!
3、結(jié)合@Async
@Async這個(gè)注解都用過(guò),用來(lái)開(kāi)啟異步任務(wù)的,使用@Async這個(gè)注解之前一定是要先配置線(xiàn)程池的,配置如下:
@Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor poolTaskExecutor = new ThreadPoolTaskExecutor();
poolTaskExecutor.setCorePoolSize(4);
poolTaskExecutor.setMaxPoolSize(6);
// 設(shè)置線(xiàn)程活躍時(shí)間(秒)
poolTaskExecutor.setKeepAliveSeconds(120);
// 設(shè)置隊(duì)列容量
poolTaskExecutor.setQueueCapacity(40);
poolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 等待所有任務(wù)結(jié)束后再關(guān)閉線(xiàn)程池
poolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
return poolTaskExecutor;
}然后在@Scheduled方法上標(biāo)注@Async這個(gè)注解即可實(shí)現(xiàn)多線(xiàn)程定時(shí)任務(wù),代碼如下:
@Async
@Scheduled(cron = "0/2 * * * * ? ")
public void test2() {
System.out.println("..................執(zhí)行test2.................");
}總結(jié)
本篇文章介紹了 Spring Boot 中實(shí)現(xiàn)多線(xiàn)程定時(shí)任務(wù)的三種方案,你喜歡哪一種?
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- springboot實(shí)現(xiàn)定時(shí)任務(wù)@Scheduled方式
- SpringBoot使用@Scheduled實(shí)現(xiàn)定時(shí)任務(wù)的并行執(zhí)行
- SpringBoot整合定時(shí)任務(wù)的方法
- SpringBoot創(chuàng)建定時(shí)任務(wù)的示例詳解
- springboot定時(shí)任務(wù)SchedulingConfigurer異步多線(xiàn)程實(shí)現(xiàn)方式
- 如何解決SpringBoot定時(shí)任務(wù)報(bào)錯(cuò)Unexpected error occurred in scheduled task問(wèn)題
相關(guān)文章
簡(jiǎn)單說(shuō)說(shuō)JVM堆區(qū)的相關(guān)知識(shí)
今天給大家?guī)?lái)的是關(guān)于Java虛擬機(jī)的相關(guān)知識(shí),文章圍繞著JVM堆區(qū)展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
mybatis-plus無(wú)法通過(guò)logback-spring輸出日志問(wèn)題及解決
本文介紹了在SpringBoot項(xiàng)目中使用Mybatis-Plus時(shí),日志只能在控制臺(tái)輸出而無(wú)法通過(guò)logback輸出的問(wèn)題及解決方法,最終選擇不使用StdOutImpl輸出日志,而是使用常規(guī)logback-spring配置來(lái)解決2026-05-05
Spring Boot2解決idea console 控制臺(tái)輸出亂碼的問(wèn)題
這篇文章主要介紹了Spring Boot2解決idea console 控制臺(tái)輸出亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
jdbc實(shí)現(xiàn)圖書(shū)館借閱系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了jdbc實(shí)現(xiàn)圖書(shū)館借閱系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02
小議Java的源文件的聲明規(guī)則以及編程風(fēng)格
這篇文章主要介紹了小議Java的源文件的聲明規(guī)則以及編程風(fēng)格,僅給Java初學(xué)者作一個(gè)簡(jiǎn)單的示范,需要的朋友可以參考下2015-09-09
Java實(shí)現(xiàn)常見(jiàn)排序算法的優(yōu)化
今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著Java實(shí)現(xiàn)常見(jiàn)排序算法的優(yōu)化展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-01-01
使用Java7的Files工具類(lèi)和Path接口來(lái)訪(fǎng)問(wèn)文件的方法
下面小編就為大家分享一篇使用Java7的Files工具類(lèi)和Path接口來(lái)訪(fǎng)問(wèn)文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
Java BigDecimal使用及基本運(yùn)算(推薦)
Java在java.math包中提供的API類(lèi)BigDecimal,用來(lái)對(duì)超過(guò)16位有效位的數(shù)進(jìn)行精確的運(yùn)算。這篇文章主要介紹了Java BigDecimal使用指南針(推薦),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
JavaWeb項(xiàng)目打開(kāi)網(wǎng)頁(yè)出現(xiàn)Session Error的異常解決方案
這篇文章主要介紹了JavaWeb項(xiàng)目打開(kāi)網(wǎng)頁(yè)出現(xiàn)Session Error的異常解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10

