簡體   English   中英

春季批處理-將多個文件寫入多個目標

[英]Spring batch - write multiple files to multiple destinations

我是Spring批處理的新手,目前正在從事新的批處理工作。 我的批處理作業:

  1. 讀取器:從數據庫中讀取記錄(即5家公司的員工)
  2. 處理器:處理記錄
  3. 5個作者:過濾記錄並將其寫入每個文件(例如,公司A的員工將在路徑A寫入公司A文件,公司B的員工將在路徑B寫入公司B文件),最后一位作者將全部寫入從公司A辭職到公司D的員工。
  4. Tasklet:將文件保存到數據庫中。

目前,我正在使用CompositeItemWriter編寫5個文件,並且可以正常工作。

<bean id="ComapanyWriter" 
    class="org.springframework.batch.item.support.CompositeItemWriter">
  <property name="delegates">
    <list>
      <ref bean="CompanyAWriter" />
      <ref bean="CompanyBWriter" />
      <ref bean="CompanyCWriter" />
      <ref bean="CompanyDWriter" />
      <ref bean="ResignedEmpWriter" />
    </list>
  </property>
</bean>

但是,我意識到,如果讀取器從數據庫中檢索到5萬條記錄,則每個寫入器將循環所有記錄,搜索其各自的公司員工並寫入文件,這總共是5 x 5萬次,並且是多余的。 因此,我擔心性能。

我能想到的一些解決方案:

  1. 試圖從數據池(項目)中刪除寫入的記錄,以便下一個寫入器將循環較少的數據,但似乎不允許這樣做? (我收到此錯誤java.lang.UnsupportedOperationException
  2. 將記錄分為5個列表(companyAList,companyBList等),供每個編寫者編寫,但我不確定如何實現
  3. 將記錄分為5個寫入器列表,並使用1個寫入器寫入5個文件,但不確定是否可行。
  4. 傳遞公司ID作為參數,以便作業將根據該參數動態處理和寫入文件。 此方法將需要為4個公司觸發4次作業,並且無法處理所有公司的離職員工。
  5. 現在,我正在查看ClassifierCompositeItemWriter,不確定是否會有所幫助。

請告訴我如何實現上述方法或如何實現批處理作業目標。

ClassifierCompositeItemWriter是必經之路。 Classifier將對項目進行Classifier並將其傳遞給指定的作者。 這樣,每個編寫器將只接收分配給它的類的項目,而不遍歷該塊的所有項目。

您可以在此處找到有關如何使用ClassifierCompositeItemWriter的示例: https : //github.com/spring-projects/spring-batch/blob/master/spring-batch-infrastructure/src/test/java/org/springframework/batch /item/support/ClassifierCompositeItemWriterTests.java

有一個與此類似的問題,我在此添加以供參考: 讀取平面文件並寫入多個將寫入不同對象的寫入器

希望這可以幫助。

暫無
暫無

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

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