簡體   English   中英

通過增加 Spring Batch 中的步驟池大小來更改運行步驟的數量

[英]Changing the number of running steps by increasing the step pool size in Spring Batch

這是一個關於在運行時更改線程池大小如何影響彈簧批處理運行時系統的復合問題。

首先,我想澄清一下:並發 = # 運行步驟數和並行度 = 每步驟 # 線程數。

為了清楚地了解我如何使用 Spring Batch 進行處理。 目前我正在生成大量文件(200+),我正在使用 Spring Batch 傳輸每個步驟映射到 1 個文件的文件。 關於工作的一切都是動態的,就像步驟數一樣,每個步驟的讀取器和寫入器都與該步驟不同。 所以沒有步驟共享讀者或作者。 有一個線程池專門用於並發運行這些步驟,然后每個步驟都有自己的線程池,因此我們可以在每個步驟中進行並行處理。 當與提交間隔結合使用時,這提供了巨大的吞吐量和控制。

所以我的問題是:

  1. 作業開始后如何更改運行步驟數?
  2. 如何在步驟開始處理后更改提交間隔?

因此,讓我們考慮一個示例,說明我為什么要這樣做以及更改“運行步驟”和“提交間隔”的確切含義。

考慮一下您總共有 300 個步驟要處理的情況,步驟線程池大小為 5。我開始處理並意識到我有更多資源可以利用,我想將線程數更改為 8。當我實際執行此操作時在運行時,我的經驗是線程池確實增加了,但運行步驟的數量沒有改變。 這是為什么?

按照類似的邏輯說我有更多的內存可以利用,然后我想在運行時增加我的提交間隔。 我在 StepExecution 類中沒有發現任何可以讓我出人意料地更改提交間隔的東西。 為什么不?

有趣的是,對於並行性,我可以通過簡單地增加線程池的大小來改變運行線程的數量。 通過簡單地更改並行線程的數量,我注意到吞吐量大幅增加。

如果您想了解更多信息,我可以提供代碼並鏈接到存儲庫。

非常感謝。

雖然可以使提交間隔和線程池大小可配置並在啟動時更改它們,但一旦作業執行開始,就無法在運行時(即“運行中”)更改它們。

使提交間隔和線程池大小可配置(通過應用程序/系統屬性或將它們作為作業參數傳遞)將允許您根據經驗調整值以最好地利用您的資源,而無需重新編譯/重新打包您的應用程序。

您正在尋找的運行時動態默認情況下不可用,但您始終可以實現Step接口並將其用作 Spring Batch 作業的一部分,旁邊是框架提供的開箱即用的其他步驟類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM