🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一、概述 轻量级定时任务,可以通过springboot支持的内置定时机制实现(当然Java自带的Timer和ScheduledExecutorService也可以,重量级的肯定要用单独的调度服务器); ## 二、基于@Scheduled的简单定时任务 1、在启动类中加上@EnableScheduling注解来开启定时任务; 2、直接新建执行类即可(建议新建Service来处理实际业务),定时执行方法上加上@Scheduled注解即可; ``` @Component public class ScanStaffStatusTask { @Autowired private ScanStaffStatusService scanStaffStatusService; @Scheduled(fixedRate = 6000) private void proces() { scanStaffStatusService.scanAndSync(); } } //ScanStaffStatusService @Service public class ScanStaffStatusService { @Autowired private SysStaffDao sysStaffDao; public void scanAndSync() { System.out.println("ok"); } } ``` ## 三、基于SchedulingConfigurer的动态定时任务 @Schedule注解实现的定时任务,有个缺点就是其定时时间不能动态更改,它适用于具有固定任务周期的任务;而基于 SchedulingConfigurer 接口方式可以做到; SchedulingConfigurer 接口可以实现在@Configuration 类上,同时不要忘了,还需要@EnableScheduling 注解的支持; ## 四、多线程执行 默认的,将采用单线程的方式,执行所有注册的调度服务;如果需要采用多线程,那么需要配置TaskScheduler定义; 1、通过代码简单配置: ``` @Bean public TaskScheduler taskScheduler() { ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); taskScheduler.setPoolSize(10); return taskScheduler; } ``` 2、或者直接通过配置项: ``` spring.task.scheduling.pool.size spring.task.scheduling.shutdown.await-termination spring.task.scheduling.shutdown.await-termination-period spring.task.scheduling.thread-name-prefix ```