我是Spring批处理的新手,目前正在从事新的批处理工作。我的批处理作业:
目前,我正在使用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万次,并且是多余的。因此,我担心性能。
我能想到的一些解决方案:
请告诉我如何实现上述方法或如何实现批处理作业目标。
答案 0 :(得分:0)
ClassifierCompositeItemWriter
是必经之路。 Classifier
将对项目进行分类并将其传递给指定的作者。这样,每个编写器将只接收分配给该类的类的项目,而不会遍历该块中的所有项目。
您可以在此处找到如何使用ClassifierCompositeItemWriter
的示例:https://github.com/spring-projects/spring-batch/blob/master/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/support/ClassifierCompositeItemWriterTests.java
有一个与此类似的问题,我在这里添加以供参考:Read flat file and write to multiple writers which will write different objects。
希望这会有所帮助。