簡體   English   中英

Java批處理:如何以編程方式確定您正在運行的分區?

[英]Java batch: How to programmatically determine which partition you are running?

JSR-352批處理中,我想使用分區。 我可以通過配置定義分區數量,或者實現PartitionMapper來實現。

然后,有JobContextStepContext注入,以便為我的處理提供上下文信息。 但是,沒有PartitionContext等維護並提供有關我正在運行的分區的詳細信息。

因此問題是:

如何告訴每個分塊實例的塊正在運行哪個分區,以便它的ItemReader只能讀取屬於該特定分區的那些項目?

如果我不這樣做,每個分區將對相同的數據執行相同的工作,而不是將輸入數據集拆分為n不同的分區。

我知道我可以在分區計划的屬性中存儲一些ID,然后我可以使用它在步驟的配置中設置另一個屬性,如<property name="partitionId" value="#{partitionPlan['partitionId']}" /> 但這似乎過於復雜和脆弱,因為我必須從分區計划中知道屬性的名稱,並且必須記住始終為每個步驟將另一個屬性設置為此值。

是否有另一種干凈,標准的方法來為步驟提供分區信息?

或者,我應該如何通過分區拆分工作並將其分配給同一分區塊中的不同ItemReader實例?

更新:

似乎jberet具有org.jberet.cdi.PartitionScoped CDI范圍,但它不是JSR標准的一部分。

使用分區計划(XML)或分區映射器(programatical)定義分區時,請將這些信息作為分區屬性包含在內,然后在項目讀取器/處理器/寫入器屬性中引用這些分區屬性。

這是告訴項目閱讀器和其他批處理工件要處理哪些資源,從哪里開始以及在何處結束的標准方法。 這與非分區塊配置沒有太大區別,在非配置塊配置中,您還需要使用批處理屬性配置輸入數據的源和范圍。

例如,請org.jberet.test.chunkPartitionFailComplete.xml從jberet測試應用程序之一。

暫無
暫無

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

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