您可以採取的一種方法是將每個任務存儲在數據庫中,只要它被提交即可。
然後,在晚上,您可以運行一個查詢數據庫並按順序處理返回的任務的作業。當每個任務的處理完成後,您可以從數據庫中刪除任務或將其標記爲已處理。
如果碰巧有很多任務,可以分批處理。
該作業的草圖可以是:
@Scheduled(cron = "some_time_at_night")
public void runJob() {
// Query non processed tasks from the database
List<Task> tasks = database.getNonProcessedTasks();
// Iterated over returned tasks
for (Task t : tasks) {
try {
// Process current task
this.process(t);
// Mark current task as processed in database or delete it
database.updateTaskAsProcessed(t);
} catch (Exception ex) {
// Handle ex, either log it or store it for further reference
}
}
}
private void process(Task t) {
// Perform processing here
}
春天由@Scheduled
annotation的手段支持cron表達式。
感謝您的幫助。我希望有更多的「自動化」解決方案,只需對現有代碼進行最小限度的更改,但我想我會嘗試一下。 – user683887