spring(springboot)利用註解實現定時任務並實現非同步處理
阿新 • • 發佈:2018-12-14
spring3.0之後就實現了自己的定時任務,而且非常簡單
1.在啟動類上加 @EnableScheduling 註解開啟定時任務支援
2.在自己的定時任務類上加 @EnableScheduling 即可,第一步不用說了,第二步程式碼如下
@Configuration//配置類 @EnableScheduling//支援定時任務類 public class SimpleScheduleConfig { @Scheduled(cron = "0/1 * * * * ?")//每隔1秒執行一次 public void configureTasks() throws InterruptedException { //業務處理 System.err.println("執行定時任務"); Thread.sleep(3000); System.err.println("執行定時任務: 休眠後"); } }
這樣就完全實現了定時任務,就是這麼簡單,但是現在有一個問題,這個業務最少要執行3秒,可是定時是每秒執行,現在是同步執行只有等上一個定時任務執行完才會執行下一次任務,所以現在的控制檯輸出是下圖,前一次執行完執行下一次,會一直等著,我們如果有需求要讓他非同步執行,不管上次執行完沒有都要執行新的任務
3.實現定時任務的非同步處理,在啟動類上加 @EnableAsync 註解開啟支援非同步
4.在需要實現非同步的方法上加 @Async 開啟非同步即可
@Configuration//配置類 @EnableScheduling//支援定時任務類 public class SimpleScheduleConfig { @Scheduled(cron = "0/1 * * * * ?")//每隔1秒執行一次 @Async//開啟非同步方法 public void configureTasks() throws InterruptedException { //業務處理 System.err.println("執行定時任務"); Thread.sleep(3000); System.err.println("執行定時任務: 休眠後"); } }
現在控制檯如下
可以看出這次完全就是不等上一次執行完就可以執行下一次