springboot2.0以上调度器如何配置线程池

这篇文章给大家分享的是有关springboot2.0以上调度器如何配置线程池的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

成都创新互联公司专注于企业全网整合营销推广、网站重做改版、永善网站定制设计、自适应品牌网站建设、H5建站电子商务商城网站建设、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为永善等各大城市提供网站开发制作服务。

springboot2.0 以上spring task 开启多线程

一 我们使用@EnableScheduling 开启spring task 调度器的时候,发现此调度器默认配置为单线程的。

二 打开注解发现其配置信息在此SchedulingConfiguration类中。发现其创建了ScheduledTaskRegistrar类

研读代码不难发现调度器默认配置是如下代码,线程池为单线程的。

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 运行在多线程环境中。

感谢各位的阅读!关于“springboot2.0以上调度器如何配置线程池”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!


标题名称:springboot2.0以上调度器如何配置线程池
文章起源:http://hbruida.cn/article/jdcogd.html