spring定時器使用註解@Scheduled執行任務,fixedDelay、fixedRate和cron區別
阿新 • • 發佈:2018-11-12
註解@Scheduled 可以作為一個觸發源新增到一個方法中,例如,以下的方法將以一個固定延遲時間5秒鐘呼叫一次執行,這個週期是以上一個呼叫任務的
完成時間
為基準,在上一個任務完成之後,5s後再次執行:
1 2 3 4 |
@Scheduled
(fixedDelay= 5000
)
public
void
doSomething() {
// something that should execute periodically
}
|
如果需要以固定速率執行,只要將註解中指定的屬性名稱改成fixedRate即可,以下方法將以一個固定速率5s來呼叫一次執行,這個週期是以上一個任務開始時間為基準,從上一任務開始執行後5s再次呼叫:
1 2 3 4 |
@Scheduled
(fixedRate=
5000
)
public
void
doSomething() {
// something that should execute periodically
}
|
對於固定延遲和固定速率的任務,可以指定一個初始延遲表示該方法在第一被呼叫執行之前等待的毫秒數:
1 2 3 4 |
@Scheduled
(initialDelay=
1000
, fixedRate=
5000
)
public
void
doSomething() {
// something that should execute periodically
}
|
如果簡單的定期排程不能滿足,那麼cron表示式提供了可能。例如,下面的方法將只會在工作日執行:
1 2 3 4 |
@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。
http://blog.51cto.com/dwf07223/1557145