乐趣区

关于java:java-cron踩坑

想要定时运行工作,能够采纳实现 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 是服务一启动就打印,不存在期待的问题。

退出移动版