SpringBoot 定时任务线程池配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Configuration
@EnableScheduling
public class ScheduleConfig implements SchedulingConfigurer {

@Bean("scheduledThreadPoolExecutor")
public Executor scheduledThreadPoolExecutor() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
// 配置线程前缀
scheduler.setThreadNamePrefix("Scheduling-");
// 配置线程池线程数量
scheduler.setPoolSize(10);
return scheduler;
}

@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.setScheduler(scheduledThreadPoolExecutor());
}
}

通过参数控制定时任务是否启用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Component
// 此处增加了默认配置,如果不配置默认是开启定时任务的
// true Spring管理(启用)
// false Spring不进行管理(停用)
@ConditionalOnProperty("${enable:true}")
public class ScheduleTask {

private static final Logger LOGGER = LoggerFactory.getLogger(this.class);

@Scheduled(cron = "${cron:* * * * * ?"})
public void printLog() {
LOGGER.warn("执行定时任务");
}
}

@Scheduled 注解的常用配置项

1
2
3
4
5
6
7
8
9
10
11
12
// 设置初始化等待时间,即项目启动后10秒后开始执行
@Scheduled(initialDelay = 10000L,fixedDelay = 1000L)

// cron 可以使用cron表达式来控制任务的执行
// cron公式辅助工具:https://www.bejson.com/othertools/cron/
// fixedDelay 任务执行完成后间隔多久执行一次(单位毫秒)
// fixedRate 任务执多久执行一次(单位毫秒)不会因为上次没有执行完而导致下次的执行
@Scheduled(cron = 10000L)
@Scheduled(fixedDelay = 10000L)
@Scheduled(fixedRate = 10000L)