[英]Java batch: How to programmatically determine which partition you are running?
在JSR-352批處理中,我想使用分區。 我可以通過配置定義分區數量,或者實現PartitionMapper
來實現。
然后,有JobContext
和StepContext
注入,以便為我的處理提供上下文信息。 但是,沒有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.