[英]How do I set up to run batch jobs based on priority?
我查看了文檔以及谷歌嘗試學習的許多內容,但到目前為止,我已經空手而歸:
1)是否有可設置的參數可以讓我實現以下目的? 如果有,我該如何配置?
我想設置批處理作業,這樣除了“正常”優先級之外,我還可以選擇運行“高”優先級作業,這會阻止其他人排隊。 在“正常”優先工作中,FIFO很好。 我希望持續記錄所提交的工作及其狀態,最好是自動重試失敗。
我特別使用Spring-Batch 3.0.3和Spring 4.0.6。 我正在從JBoss AS 7.1.1服務器上的Web服務提交作業。
2)如果沒有開箱即用的實現,我可以寫一些東西(taskExecutor?)來實現這個目標嗎? 我怎么能這樣做?
我得到了建議的ThreadPoolExecutor,但Job類仍然難以處理,因為我找不到指定作業類的位置。 (由於多種原因,我正在使用jXML進行配置,而不是使用注釋進行編程。)無論我做什么,部署總是繼續使用org.springframework.batch.core.job.flow.FlowJob然后可以轉換到不同的工作類。
您可以使用帶有PriorityBlockingQueue的ExecutorService來處理此問題,例如:
int maxThreads = 4;
ExecutorService pool = new ThreadPoolExecutor(1, maxThreads, 1, TimeUnit.SECONDS, new PriorityBlockingQueue<Runnable>());
然后,為您提供盡可能多的工作:
Job job = new Job(desiredPriority);
pool.execute(job);
這些將由PriorityBlockingQueue根據您傳遞給它們的優先級進行排序。
您的Job類將實現Runnable和Comparable:
public class Job implements Runnable, Comparable<Job> {
private final int priority;
public Job(int priority) {
this.priority = priority;
}
@Override
public int compareTo(Job o) {
// enforces descending order (but this is up to you)
if (this.priority > o.priority) {
return -1;
} else if (this.priority < o.priority) {
return 1;
} else {
return 0;
}
}
@Override
public void run() {
// do whatever needs to happen on a thread
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.