優缺點
在 SpringBoot2.0 中通過 @Schedule注解就可以簡單的實作定時任務,但是這種方式夠靈活,如果想要修改執行狀态就必須修改代碼;另外一種實作方式是通過 Quartz 實作任務排程
實作步驟
- 定義任務的實作方法,隻需在方法上加入注解 @Scheduled即可
@Component
@Slf4j
public class SimpleScheduledJob {
/**
* 每五秒執行一次
*/
@Scheduled(fixedRate = 5000)
private void startJob(){
log.info("定時任務啟動....");
}
}
- 在啟動類上加入注解 @EnableScheduling
@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
- 啟動項目後就會執行定時任務
@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 * * ?
将時間表達式寫入配置檔案中
- 在配置application.yml檔案中配置時間
job:
time: 0 0 0 * * ?
- 在定時任務方法中注入配置
具體請參照https://www.jianshu.com/p/1defb0f22ed1