1、注解@Scheduled 可以作為一個觸發源添加到一個方法中,例如,以下的方法將以一個固定延遲時間5秒鍾調用一次執行,這個周期是以上一個調用任務的完成時間為基准,在上一個任務完成之后,5s后再次執行:
1 @Scheduled(fixedDelay=5000) 2 public void doSomething(){ 3 //todo 4 }
2、如果需要以固定速率執行,只要將注解中指定的屬性名稱改成fixedRate即可,以下方法將以一個固定速率5s來調用一次執行,這個周期是以上一個任務開始時間為基准,從上一任務開始執行后5s再次調用:
1 @Scheduled(fixedRate=5000) 2 public void doSomething(){ 3 //todo 4 }
3、對於固定延遲和固定速率的任務,可以指定一個初始延遲表示該方法在第一次被調用執行之前等待的毫秒數:
1 @Scheduled(initialDelay=1000, fixedRate=5000) 2 public void doSomething(){ 3 //todo 4 }
4、如果簡單的定期調度不能滿足,那么cron表達式提供了可能,還可以通過使用zone屬性來指定cron表達式被調用的時區 .例如,下面的方法將只會在工作日執行:
1 @Scheduled(cron="*/5 * * * * MON-FRI",zone="") 2 public void doSomething(){ 3 //todo 4 }
cron 有關時間可以查看:http://www.cnblogs.com/wang-yaz/p/8417776.html
注意:
1、spring的注解@Scheduled 需要寫在實現方法上;
2、定時器的任務方法不能有返回值(如果有返回值,spring初始化的時候會告訴你有個錯誤、需要設定一個proxytargetclass的某個值為true),不能指向任何的參數;
3、如果該方法需要與應用程序上下文的其他對象進行交互,通常是通過依賴注入來實現;
4、實現類上要有組件的注解@Component。