1. 程式人生 > >spring(springboot)利用註解實現定時任務並實現非同步處理

spring(springboot)利用註解實現定時任務並實現非同步處理

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("執行定時任務: 休眠後");
    }
}

現在控制檯如下

可以看出這次完全就是不等上一次執行完就可以執行下一次