spring boot 自定义线程池与使用

spring boot 自定义线程池与使用

一、进行线程池创建

import cn.hutool.core.thread.ThreadFactoryBuilder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurerSupport;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;

import java.lang.reflect.Method;
import java.util.concurrent.Executor;

/**
 * 线程池配置(异步线程)
 */
@Slf4j
@Configuration
@EnableAsync
public class ThreadPoolTaskSchedulerConfig extends AsyncConfigurerSupport {
    @Bean("threadPoolTaskScheduler")
    public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
        //这里使用的为定时任务线程池,替代@Scheduled注解,进行动态定时任务配置
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setThreadFactory(ThreadFactoryBuilder.create().build());
        scheduler.setPoolSize(60);
        scheduler.setRemoveOnCancelPolicy(true);
        scheduler.setThreadNamePrefix("TASK-SCHEDULE-");
        scheduler.initialize();
        return scheduler;
    }

    @Override
    public Executor getAsyncExecutor() {
        return threadPoolTaskScheduler();
    }

    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return (Throwable t, Method m, Object... args) -> {
            log.error("=============================" + t.getMessage() + "==============================");
            log.error("threadPoolTaskScheduler exception Method:" + m.getName());
        };
    }

}
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » spring boot 自定义线程池与使用