天天看點

Springboot2.0注解@Scheduled 啟動定時任務優缺點實作步驟将時間表達式寫入配置檔案中

優缺點

在 SpringBoot2.0 中通過 @Schedule注解就可以簡單的實作定時任務,但是這種方式夠靈活,如果想要修改執行狀态就必須修改代碼;另外一種實作方式是通過 Quartz 實作任務排程

實作步驟

  1. 定義任務的實作方法,隻需在方法上加入注解 @Scheduled即可
@Component
@Slf4j
public class SimpleScheduledJob {

    /**
     * 每五秒執行一次
     */
    @Scheduled(fixedRate = 5000)
    private void startJob(){
        log.info("定時任務啟動....");
    }
}
           
  1. 在啟動類上加入注解 @EnableScheduling
@SpringBootApplication
@EnableScheduling
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}
           
  1. 啟動項目後就會執行定時任務

@Scheduled 注解參數說明

  • fixedDelay:上一次執行完畢時間點之後多長時間再執行,整數表示
  • fixedDelayString:上一次執行完畢時間點之後多長時間再執行,字元串形式表示
  • fixedRate:上一次開始執行時間點之後多長時間再執行,整數表示
  • fixedRateString:上一次開始執行時間點之後多長時間再執行,字元串表示
  • cron 表達式文法
[秒] [分] [小時] [日] [月] [周] [年]

注:[年]不是必須的域,可以省略[年],則一共6個域
           

示例

每隔5秒執行一次:*/5 * * * * ?
每隔1分鐘執行一次:0 */1 * * * ?
每天23點執行一次:0 0 23 * * ?
每天淩晨1點執行一次:0 0 1 * * ?
每月1号淩晨1點執行一次:0 0 1 1 * ?
每月最後一天23點執行一次:0 0 23 L * ?
每周星期天淩晨1點實行一次:0 0 1 ? * L
在26分、29分、33分執行一次:0 26,29,33 * * * ?
每天的0點、13點、18點、21點都執行一次:0 0 0,13,18,21 * * ?
           

将時間表達式寫入配置檔案中

  1. 在配置application.yml檔案中配置時間
job:
 time: 0 0 0 * * ?
           
  1. 在定時任務方法中注入配置

具體請參照https://www.jianshu.com/p/1defb0f22ed1

繼續閱讀