在启动类上添加EnableScheduling
注解,启用定时任务
@SpringBootApplication
@EnableSwagger2
@ComponentScan({"com.zdran.springboot"})
@EnableScheduling
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
... ...
}
创建一个简单的定时任务
@Component
public class HelloTask {
private static int count = 1;
private Logger logger = LoggerFactory.getLogger(HelloTask.class);
@Scheduled(fixedRate = 5000)
public void printHello() {
logger.info("Hello 定时任务开始。");
logger.info("Hello Task! count = {}", count++);
logger.info("Hello 定时任务结束。");
}
}
启动项目会看到每隔5000毫秒会执行一下这个方法。
还可以通过 cron表达式指定执行时间。类似于 @Scheduled(cron=”*/5 * * * * *”)
Cron表达式由7个部分组成,各部分用空格隔开,每个部分的含义如下:
Seconds Minutes Hours Day-of-Month Month Day-of-Week Year
cron中有一些特殊符号:
cron表达式中有一组组比较特殊的字段 Day-of-Month 和 Day-of-Week
,
如果你要求每月的几号执行,那么 Day-of-Week
就要用 “?”,
如果你要求每周的周几执行,那么 Day-of-Month
就要用 “?”,
具体是什么原因我也不知道。举个例子:有一个定时,希望每个月的 1号凌晨1点执行,那么cron表达式为0 0 1 1 * * ?