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