发现项目中有一个定时任务延迟6秒启动,然后死循环。(@Scheduled注解各参数详解)
/**
* 延迟60秒继续执行,异步执行;
*/
@Scheduled(fixedDelay = 6000)
public void run() {
log.info("init zk register");
while (true) {
log.info("do something...");
Thread.sleep(5000);
}
}
由此断定是因为线程池里唯一的线程被死循环占用了。
解决方案:
主动配置TaskScheduler,指定线程池线程数量。
package com.soyoung.ztdata.dataservice.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
/**
* @program: zt_service
* @description:
* @author: Leon
* @create: 2021-06-04 22:07
**/
@Configuration
public class SoYongSchedulingConfiguration implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(2);
threadPoolTaskScheduler.initialize();
taskRegistrar.setScheduler(threadPoolTaskScheduler);
}
}