@EnableScheduling
註解@EnableScheduling @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
@Component
註解@Component public class ScheduleService { ... }
1) fixedDelay
html
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) fixedRate
spring-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