2017-10-10 152 views
0

我們在每個工作日的Spring批處理中都有一個作業,由另一個系統觸發。有時在同一天有幾個工作實例要運行。每個人都從另一個系統觸發。每個作業運行約一個小時,如果有多個作業實例要運行,我們會遇到一些數據問題。在Spring批處理中排隊作業實例

我們希望如下優化此步驟,如果沒有作業實例正在運行,那麼啓動一個新的作業實例,如果有作業實例正在運行已經將新的作業放入隊列中。 每個作業實例必須在下一個作業觸發前完成。如果一個人失敗,下一個人必須等待。 作業參數是一個增量和一個時間戳。

我谷歌搜索了一下,但找不到任何我覺得有用的東西。 所以我想知道這是否適合在春季批處理作業實例? 如果是這樣,我該怎麼做?我研究了Spring集成和工作啓動網關,但我並不真正瞭解如何實現它,我想我不明白它是如何工作的。我嘗試閱讀這些東西,但我仍然不明白。

也許我的彈簧批次版本錯了嗎?也許我錯過了什麼?

如果您需要更多的信息,請讓我知道! 謝謝!

我們使用的是spring-core和spring-beans 3.2.5,spring-batch-integration 1.2.2,spring-integration-core 3.0.5,spring-integration-file,-http,-sftp,-stream 2.0.3

+0

檢查此https://stackoverflow.com/questions/37405659/can-spring-provide-concept-like-job-queue –

回答

0

那麼,如果你很高興在你的應用程序中與Spring Batch一起使用Spring Integration,那麼利用job-launching-gateway功能確實是個好主意。

對,您可以將任務放入隊列中 - 實質上是QueueChannel

要輪詢該通道的端點可以配置爲max-message-per-poll="1"從內部隊列一次只輪詢一個任務。

當您剛剛輪詢一條消息時,將其發送到job-launching-gateway,同時向Control Bus組件發送停止該輪詢端點的命令,直到當前作業完成時才觸及隊列中的其他消息。作業爲COMPLETED時,您可以發送一個控制消息來啓動該輪詢端點。確保您使用相同版本中的所有Spring集成模塊:spring-integration-core 3.0.5,spring-integration-file,-http,-sftp,-stream 3.0.5

相關問題