SpringBoot 多线程定时任务

在 SpringBoot 启动类中添加 @EnableScheduling

@EnableScheduling
@SpringBootApplication
public class CronDemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(CronDemoApplication.class, args);
	}

}

定义类实现 SchedulingConfigurer

@Configuration
public class ScheduleConfig implements SchedulingConfigurer {

    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
    	scheduledTaskRegistrar.setScheduler(Executors.newScheduledThreadPool(20));
    }

}

定义定时器类

@Slf4j
@Component
public class CronApplication {

    @Scheduled(cron = "0/1 * * * * ?")
    public void runOne() throws InterruptedException {
        log.info("runOne:start");
        Thread.sleep(1000 * 10);
        log.info("runOne:end");
    }

    @Scheduled(cron = "0/1 * * * * ?")
    public void runTwo() throws InterruptedException {
        log.info("runTwo:start");
        Thread.sleep(1000 * 5);
        log.info("runTwo:end");
    }

}
  • 注意如果定时器没执行需要检查
  • 检查springboot启动类中是否有加 @EnableScheduling
  • 检查定时器类是否存在springboot容器中, 如果没有在类上添加 @Component