spring-boot中的默认调度程序池大小是多少?
我正在使用spring-boot
和@Scheduled
注释来执行某些任务。
如何在spring-boot中找出默认的计划任务的默认池大小?
原因:以下类不并行执行作业,而是一个接一个地执行。 也许默认情况下只配置一个线程执行程序?
@Service public class ZipFileTesterAsync { @Scheduled(fixedDelay = 60000, initialDelay = 500) public void run() throws Exception { System.out.println("import 1"); TimeUnit.MINUTES.sleep(1); System.out.println("import 1 finished"); } @Scheduled(fixedDelay = 60000, initialDelay = 1000) public void run2() throws Exception { System.out.println("import 2"); TimeUnit.MINUTES.sleep(1); } }
结果:第一个完成后执行第二个作业。
是的,默认情况下,所有@Scheduled
方法共享一个线程。 可以通过定义@Configuration
来覆盖此行为,例如:
@Configuration public class SchedulingConfigurerConfiguration implements SchedulingConfigurer { @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); taskScheduler.setPoolSize(100); taskScheduler.initialize(); taskRegistrar.setTaskScheduler(taskScheduler); } }
此示例确保所有@Scheduled
方法共享大小为100的线程池。