想要定时运行任务,可以采用实现ApplicationRunner和cron的方式进行。但是,cron这种方式服务启动的时候不会运行(如果你的表达式里面不是具体时间,而是间隔多少分钟或者多少小时)。而ApplicationRunner每次启动都会先运行一下,下面简单看一下效果。
一.cron方式
1.在启动类加入@EnableScheduling,用于开启定时任务功能
2.简单的示例
@Component
public class CronTask {
/**
* 每分钟执行一次
*/
@Scheduled(cron="0 */1 * * * ?")
public void execute() {
System.out.println("CronTask任务执行");
}
}
二.实现ApplicationRunner接口方式
简单示例:
@Component
public class ApplicationRunnerTask implements ApplicationRunner {
/**
* 每分钟执行一次
* @param args
* @throws Exception
*/
@Override
public void run(ApplicationArguments args) throws Exception {
while(true){
try{
System.out.println("ApplicationRunnerTask任务执行");
Thread.sleep(1000 * 60);
}catch(Exception e){
System.out.println("Exception:" + e);
}
}
}
}
三.运行对比差异
可以看到ApplicationRunnerTask先打印,而cronTask后面才打印。因为cronTask会在整分,整时打印(取决于你设置的是隔多久)。例如我示例设置的是每分钟打印,如果我程序是17点18分19秒启动,那么cronTask需要到17点19分0秒才打印。而ApplicationRunnerTask是服务一启动就打印,不存在等待的问题。
每天进步一点点,开心也多一点点