![](/img/trans.png)
[英]Spring cloud stream Kafka consumer stuck with long running job and large value for max.poll.interval.ms
[英]Running Spring job for a defined interval of time
我有一個包含表document
的數據庫。 該表定義了我將要處理的文檔的路徑。
文檔的處理非常繁瑣,單個文檔可能要花費幾分鍾。
我有20萬多個文件要處理。
這些文檔托管在生產中的應用程序中。 所以我必須每晚處理它們。
我的問題是:是否可以定義一個spring-batch作業,該作業可以從DB查詢(未處理的)文檔並進行處理,然后安排該作業(使用Quartz)在上午8點停止並在晚上8pm重新啟動天?
編輯
我想我應該讓自己更清楚:
我的問題是:我是否應該有一份工作來處理所有文檔,並使其每天停止並在一天結束時重新啟動。 還是應該讓我的工作每次只處理一個文檔?
到現在為止,我只使用一項工作來遍歷所有文檔(自從我使用Spring Batch文檔以來),就發現了所有示例,他們都在談論(使用閱讀器)讀取整個表並處理數據。
如果這是個好方法,那么我該如何中斷工作執行,直到一天結束。
或者我應該只按文檔使用一項工作?
是的,這是可能的。
Cron表達式類似於:
0 0/1 20-8 ? * MON-FRI
只需確認一下即可(自從我看過cron表達式以來已經有一段時間了),但這應該在周一至周五的20:00至08:00之間的每一分鍾運行。
在默認情況下,Quartz作業不會在Spring中並發運行(請參閱: http : //static.springsource.org/spring/docs/3.0.x/reference/scheduling.html ),因此您不必擔心重疊。 然后,您可以在每次運行中選擇定義數量的文檔進行處理(10個說),如果前一個運行結束,直到凌晨8點,Quartz每分鍾都會觸發另一個運行。 當最后一個處理工作在早上完成時,它將直到下午5點才再次將其解雇。
請注意 ,上一份工作可能會在7:59:59開始並超過上午8點,因此您可能希望將結束時間提前一些以進行補償。
編輯:
我認為更細粒度的方法(不一定是單個文檔,而可能是一個塊)更適合於批處理和調度。 這有效地利用了石英來完成您將要在單個工作中執行的循環,但是卻為您帶來了不必擔心調度元素的所有好處!
您將需要一項工作來一次處理DB中的一個文檔。
在Spring Quartz中使用cron觸發器 ,您可以將其計划為定期運行(例如每30分鍾之后),從晚上8點運行到7:30 AM(如果一項作業大約需要30分鍾)。
您可以做下面的事情。
從數據庫處理文檔中讀取1(未處理)文檔路徑。 在數據庫提交中刪除(或標記為已處理)
要使作業按計划開始,可以使用Quartz計划程序。 但是,這不會在特定時間終止作業。 為此,您應該
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.