繁体   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