huang
2025-10-22 3eaf0f2f1b909ac429cac9fc26af767ddecda065
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.mes.tools;
 
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
 
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
 
/**
 * @author huang
 * @since 2025/10/22
 */
@Configuration
public class SchedulerConfig implements SchedulingConfigurer {
 
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        // 使用 ScheduledThreadPoolExecutor(支持定时调度的线程池)
        ScheduledThreadPoolExecutor schedulerPool = new ScheduledThreadPoolExecutor(
                // 核心线程数:根据定时任务数量设置
                5,
                new ThreadFactory() {
                    private final AtomicInteger count = new AtomicInteger(1);
                    @Override
                    public Thread newThread(Runnable r) {
                        return new Thread(r, "scheduler-thread-" + count.getAndIncrement());
                    }
                },
                new ThreadPoolExecutor.CallerRunsPolicy()
        );
        // 设置空闲线程存活时间(非核心线程,默认60秒,可按需调整)
        schedulerPool.setKeepAliveTime(60, TimeUnit.SECONDS);
        // 允许核心线程超时销毁(如果任务不频繁,可节省资源)
        schedulerPool.allowCoreThreadTimeOut(true);
 
        taskRegistrar.setScheduler(schedulerPool);
    }
}