使用定时任务时,会存在一个小问题,比如当我们设置每30分钟执行一次,但是我们启动服务后不会立即执行,而是下次的30分钟到了才执行。
解决方式:
增加注解@PostConstruct
- //定时任务(每30分钟执行一次)
- @PostConstruct
- @Scheduled(cron = "0 1/30 * * * ?")
- private void configureTasks() {
- log.info("-----------开始定时任务-----------");
- //业务处理
- try {
- log.info("-----------业务处理-----------");
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- log.info("-----------结束定时任务-----------");
- }
启动服务后,可以发现会立即执行一次

注意:这样虽然能解决,但是有个缺陷,如果定时任务执行的是耗时操作,比如调用一个远程接口,如果这个接口超时,那服务就会启动失败。所以我们可以用另外的方式来实现,比如在服务启动成功后执行一次即可。具体可参考:SpringBoot启动时的几种初始化操作_springboot 启动初始化_时光有伱记忆成花的博客-CSDN博客
推荐:通过实现CommandLineRunner或ApplicationRunner接口来实现即可