springboot 定時任務

1.啓動類添加 @EnableScheduling 註解

@EnableScheduling
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

2.定時任務類添加 @Component 註解

@Component
    public class ScheduleService {
        
        ...
    }

3.定時策略

1) fixedDelayhtml

fixedDelay 表示應用啓動後執行第一次,而後上一次任務結束以後,和下一次任務開始以前,間隔的毫秒數。git

用A表示方法開始,B表示方法結束,T表示等待時間,則 A B T A B T A B T ...github

例如:spring

@Scheduled(fixedDelay = 5000)
    public void taskA() throws Exception {

        System.out.println("Task A 開始執行,當前秒數:" + new Date().getSeconds());
        Thread.sleep(2000);
        System.out.println("Task A 執行結束,當前秒數:" + new Date().getSeconds());
    }

測試結果:
async

2) fixedRatespring-boot

fixedRate 表示應用啓動後執行第一次,而後間隔參數秒後,執行下一次,不關心上一次是否執行結束。
例如:測試

@Scheduled(fixedRate = 5000)
    public void taskB() throws Exception {

        System.out.println("Task B 開始執行,當前秒數:" + new Date().getSeconds());
        Thread.sleep(2000);
        System.out.println("Task B 執行結束,當前秒數:" + new Date().getSeconds());
    }

測試結果:
3d

3) cron 表達式code

cron表達式能夠靈活的控制定時策略,也是使用最多的。 cron表達式component

例如:

@Scheduled(cron = "0/5 * * * * ?")
    public void taskC() throws Exception {

        System.out.println("Task C 開始執行,當前秒數:" + new Date().getSeconds());
        Thread.sleep(2000);
        System.out.println("Task C 執行結束,當前秒數:" + new Date().getSeconds());
    }

測試結果:

注意:cron表達式是受程序執行影響的,上邊例子是0,5,10,15... 開始執行,可是若是程序執行了7秒,執行時間就成了0,10,20...開始執行

@Scheduled(cron = "0/5 * * * * ?")
    public void taskC() throws Exception {

        System.out.println("Task C 開始執行,當前秒數:" + new Date().getSeconds());
        Thread.sleep(2000);
        System.out.println("Task C 執行結束,當前秒數:" + new Date().getSeconds());
    }

測試結果:

demo地址
demo地址 或者 git clone -b schedule git@github.com:DannyJoe1994/spring-boot.git

相關文章
相關標籤/搜索