開啓定時任務
創建一個定時任務配置類,加上@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中。