可以将@Scheduled任务交给线程池进行处理。在Spring Boot中,可以通过以下两种方式来将@Scheduled任务加入线程池:

使用@EnableScheduling + @Configuration配置ThreadPoolTaskScheduler

@Configuration
@EnableScheduling
public class TaskSchedulerConfig {
  @Bean
  public TaskScheduler taskScheduler() {
    ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
    scheduler.setPoolSize(10);
    scheduler.initialize();
    return scheduler;
  }
}

在上述代码中,我们通过配置ThreadPoolTaskScheduler来创建一个线程池,并使用@EnableScheduling注解将定时任务开启。其中,setPoolSize方法可以设置线程池的大小,默认为1。

使用ThreadPoolTaskExecutor


@Configuration
@EnableScheduling
public class TaskExecutorConfig {
  @Bean
  public ThreadPoolTaskExecutor taskExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(10);
    executor.setMaxPoolSize(50);
    executor.setQueueCapacity(1000);
    executor.setKeepAliveSeconds(60);
    executor.setThreadNamePrefix("task-executor-");
    return executor;
  }
}

在上述代码中,我们通过配置ThreadPoolTaskExecutor来创建一个线程池,并使用@EnableScheduling注解将定时任务开启。其中setCorePoolSize、setMaxPoolSize、setQueueCapacity、setKeepAliveSeconds等方法可以用于配置线程池的大小和任务队列等参数。