开启定时任务
创建一个定时任务配置类,加上@EnableScheduling注解,也可以直接加在启动类上。
@EnableScheduling
@Configuration
public class ScheduledConfig {
}
创建自定义任务
下面两个任务,都只打印当前时间,启动程序测试即可
@Component
public class PrintTimeJob {
// cron表达式
@Scheduled(cron = "0/10 * * * * ?")
public void print() {
System.out.println("===== ===== ===== print ===== ===== =====>");
System.out.println("Now Time: " + LocalDateTime.now());
}
// initialDelay初始延迟, fixedRate固定频率(毫秒)
@Scheduled(initialDelay = 5000, fixedRate = 10000)
public void print2() {
System.out.println("===== ===== ===== print2 ===== ===== =====>");
System.out.println("Now Time: " + LocalDateTime.now());
}
}
外部配置时间间隔
定时任务cron表达式,或者执行频率通过外部配置时,可以如下:
@Component
public class JobController implements SchedulingConfigurer {
@Value("${job.print.cron}")
private String cron;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addCronTask(
() -> print()
, cron
);
}
private void print() {
System.out.println("[JobController] start job!");
}
}
ScheduledTaskRegistrar中add*()多个方法可以满足不同需求,这里使用cron,yml配置如下:
# 定时任务配置
job:
print:
cron: 0/15 * * * * ?
如果是SpringCloud微服务管理,还可以将定时器配置放入配置中心ConfigServer中。