這篇文章給大家分享的是有關springboot2.0以上調度器如何配置線程池的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)是一家從事企業(yè)網(wǎng)站建設、成都網(wǎng)站建設、成都網(wǎng)站設計、行業(yè)門戶網(wǎng)站建設、網(wǎng)頁設計制作的專業(yè)網(wǎng)絡公司,擁有經(jīng)驗豐富的網(wǎng)站建設工程師和網(wǎng)頁設計人員,具備各種規(guī)模與類型網(wǎng)站建設的實力,在網(wǎng)站建設領域樹立了自己獨特的設計風格。自公司成立以來曾獨立設計制作的站點上1000+。springboot2.0 以上spring task 開啟多線程
一 我們使用@EnableScheduling 開啟spring task 調度器的時候,發(fā)現(xiàn)此調度器默認配置為單線程的。
二 打開注解發(fā)現(xiàn)其配置信息在此SchedulingConfiguration類中。發(fā)現(xiàn)其創(chuàng)建了ScheduledTaskRegistrar類
研讀代碼不難發(fā)現(xiàn)調度器默認配置是如下代碼,線程池為單線程的。
protected void scheduleTasks() {
if (this.taskScheduler == null) {
this.localExecutor = Executors.newSingleThreadScheduledExecutor();
this.taskScheduler = new ConcurrentTaskScheduler(this.localExecutor);
}
if (this.triggerTasks != null) {
for (TriggerTask task : this.triggerTasks) {
addScheduledTask(scheduleTriggerTask(task));
}
}
if (this.cronTasks != null) {
for (CronTask task : this.cronTasks) {
addScheduledTask(scheduleCronTask(task));
}
}
if (this.fixedRateTasks != null) {
for (IntervalTask task : this.fixedRateTasks) {
addScheduledTask(scheduleFixedRateTask(task));
}
}
if (this.fixedDelayTasks != null) {
for (IntervalTask task : this.fixedDelayTasks) {
addScheduledTask(scheduleFixedDelayTask(task));
}
}
}
如何改變此配置呢?
如果想改變其中配置則只需要如下核心代碼
package com.ccbobe.common.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
@EnableScheduling
@Configuration
public class SchedulerConfig implements SchedulingConfigurer {
@Bean鄭州做人流手術 http://rl.zyfuke.com/
public ScheduledExecutorService concurrentTaskScheduler(){
ScheduledThreadPoolExecutor executorService = new ScheduledThreadPoolExecutor(20);
executorService.setMaximumPoolSize(20);
executorService.setRejectedExecutionHandler(new ScheduledThreadPoolExecutor.CallerRunsPolicy());
return executorService;
}
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(concurrentTaskScheduler());
}
}
其中Scheduler 支持兩種,種分別是:TaskScheduler 和 ScheduledExecutorService
**
* Set the {@link TaskScheduler} to register scheduled tasks with, or a
* {@link java.util.concurrent.ScheduledExecutorService} to be wrapped as a
* {@code TaskScheduler}.
*/
public void setScheduler(@Nullable Object scheduler) {
if (scheduler == null) {
this.taskScheduler = null;
}
else if (scheduler instanceof TaskScheduler) {
this.taskScheduler = (TaskScheduler) scheduler;
}
else if (scheduler instanceof ScheduledExecutorService) {
this.taskScheduler = new ConcurrentTaskScheduler(((ScheduledExecutorService) scheduler));
}
else {
throw new IllegalArgumentException("Unsupported scheduler type: " + scheduler.getClass());
}
}
完成以上配置,即可讓spring task 運行在多線程環(huán)境中。
感謝各位的閱讀!關于“springboot2.0以上調度器如何配置線程池”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
文章題目:springboot2.0以上調度器如何配置線程池-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://jinyejixie.com/article46/djedhg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設計、標簽優(yōu)化、網(wǎng)站改版、網(wǎng)站設計公司、微信小程序、響應式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容