启动类开启定时
使用注解@EnableScheduling
可开启定时任务(一般都写在启动类上),相当于开关的意思
@SpringBootApplication
@EnableScheduling
public class SchedulingApplication {
public static void main(String[] args) {
SpringApplication.run(SchedulingApplication.class, args);
}
}
创建定时任务实现类
方式一:
@Component
public class SchedulerTask1 {
private static final SimpleDateFormat dataFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(fixedDelay = 1000)
public void reportCurrentTime(){
System.out.println("现在时间:"+ dataFormat.format(new Date()));
}
}
方式二:
@Component
public class SchedulerTask2 {
private int count=0;
@Scheduled(cron="*/6 * * * * ?")
private void process(){
System.out.println("this is scheduler task runing "+(count++));
}
}
解析:
需要使用@Component注解,任务实现类作为组件被容器扫描。
Spring 的 @EnableScheduling,有三种形式来部署计划任务,即 @Scheduled 注解的 fixedRate(fixedRateString), fixedDelay(fixedDelayString), 以及 cron
@Scheduled(fixedRate = 6000)
:上一次开始执行时间点之后6秒再执行(任务两次执行时间间隔是任务的开始点)。@Scheduled(fixedDelay = 6000)
:上一次执行完毕时间点之后6秒再执行(前次任务的结束与下次任务的开始)。@Scheduled(initialDelay=1000, fixedRate=6000)
:第一次延迟1秒后执行,之后按fixedRate的规则每6秒执行一次。
cron的表达式生成地址:http://cron.qqe2.com/
注意:@Scheduled(cron="*/6 * * * * ?")中cron的值只能是6位,因此不支持年。
参考源于:
http://www.ityouknow.com/springboot/2016/12/02/spring-boot-scheduler.html