Springboot2使用Scheduled定时任务-线程池配置

在使用Scheduled做定时任务时,默认是单个线程执行,如果有一个线程执行较慢或出现异常情况则会影响其他定时任务执
行情况!!!所以我们需要配置成多线程,避免这些问题。

添加@EnableScheduling支持并配置线程池

package com.zbscxy.onecardtb.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.Executor;
import java.util.concurrent.Executors;

/**
 * 配置 schedule线程池
 */
@Configuration
@EnableScheduling
public class ScheduleConfig implements SchedulingConfigurer {
    
    

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
    
    
        taskRegistrar.setScheduler(taskExecutor());
    }

    @Bean
    public Executor taskExecutor() {
    
    
        return Executors.newScheduledThreadPool(20);        //指定线程池大小
    }


    /**
     * 异步线程池设置
     * @return
     */
//    @Bean
//    public SimpleAsyncTaskExecutor simpleAsyncTaskExecutor() {
    
    
//        SimpleAsyncTaskExecutor simpleAsyncTaskExecutor = new SimpleAsyncTaskExecutor();
//        simpleAsyncTaskExecutor.setConcurrencyLimit(2);         //设置最大并行数
//        simpleAsyncTaskExecutor.setDaemon(true);                //设置为守护线程
//        return simpleAsyncTaskExecutor;
//    }

}

配置定时任务并异步执行

1.启动类添加定时任务与异步注解
@EnableAsync
@EnableScheduling

2.添加线程池配置

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;

/**
 * 配置 schedule线程池
 */
@Configuration
public class ScheduleConfig implements SchedulingConfigurer {
    
      //, AsyncConfigurer

    // 并行任务
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
    
    
         // taskRegistrar.setScheduler(taskScheduler());
    }

    // 并行任务使用策略:多线程处理(配置线程数等)
    @Bean("abc1")
    public TaskScheduler classStuTbScheduler() {
    
    
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setThreadNamePrefix("task-1-");
        scheduler.setPoolSize(30);
        scheduler.initialize();
        return scheduler;
    }
    @Bean("abc2")
    public TaskScheduler consumeTbScheduler() {
    
    
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setThreadNamePrefix("task-2-");
        scheduler.setPoolSize(20);
        scheduler.initialize();
        return scheduler;
    }
    @Bean("abc3")
    public TaskScheduler oneDayTbScheduler() {
    
    
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setThreadNamePrefix("task-3-");
        scheduler.setPoolSize(10);
        scheduler.initialize();
        return scheduler;
    }
//    @Bean
//    public ThreadPoolTaskScheduler taskScheduler(){
    
    
//        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
//        scheduler.setPoolSize(40);
//        scheduler.setThreadNamePrefix("yb-");  //设置线程名开头
//        scheduler.setAwaitTerminationSeconds(60);
//        scheduler.setWaitForTasksToCompleteOnShutdown(true);
//        return scheduler;
//    }

//    // 异步任务
//    public Executor getAsyncExecutor(){
    
    
//        Executor executor = taskScheduler();
//        return executor;
//    }
//
//    // 异步任务 异常处理
//    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler(){
    
    
//        return new SimpleAsyncUncaughtExceptionHandler();
//    }

}

3.task类设置异步线程池

/**
 * 同步 
 * 每隔两分钟执行一次
 */
@Async("abc1")
@Scheduled(cron = "0 0/2 * * * ?")
public void asynTb() {
    
    
    //业务代码
    System.out.printIn("--------------begin-------------end-----------");
}

猜你喜欢

转载自blog.csdn.net/qq_16771097/article/details/116593388