[英]Scheduling Tasks in Spring
我們有一個要求,我們必須在X可能為30-60的數據庫中收集X分鍾的文檔。 將這些文檔收集到數據庫中之后,我們必須通過REST調用將它們推送到單獨的服務。
由於這些文檔不會很大,因此我們將它們匯總在一起,然后將它們一起推送。
現在,必須在固定的時間間隔后推送這些文檔,因此我想到了創建一個單獨的線程,該線程從數據庫中提取記錄,將其推送到服務,並且一旦服務響應為200 OK,我就從數據庫中刪除這些記錄,線程進入睡眠狀態X分鍾。
class PushDocumentsToService extends Thread{
DocumentRepository documentRepository;
DocumentProcessingService documentProcessingService
public void run(){
List<Document> list = documentRepository.getAllDocuments();
Integer statusCode = documentProcessingService.sendDocuments(list);
if(statusCode == 200)
documentRepository.remove(list);
try{
Thread.sleep(30*60);
}catch(..){..}
}
}
現在,我的一些同事已建議我不要在代碼中使用Thread.sleep。 我無法理解...的不良影響
Thread.sleep()
Spring Scheduler和Google Guava等庫和框架還可以使用哪些方法來進行計划任務?
您需要做的就是使用ScheduledExecutorService
安排線程並提供適當的頻率速率。
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
Thread t1= new PushDocumentsToService();
scheduledThreadPool.scheduleAtFixedRate(t1, 0, 30,TimeUnit.SECONDS);
如果您的類路徑中有Spring Scheduling庫,則將@Scheduled
批注添加到希望在一段時間內執行的方法。 無需擴展Thread
或實現Runnable
; Spring會代您處理所有這些工作。
您知道,只要應用程序正在運行 。
@Scheduled(cron = "30 * * * * *")
public void loadDataIntoRepository() {
// your code
}
出於以下原因, 不建議使用Thread.sleep
:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.