Spring 弹簧批处理:动态或旋转编写器
我正在尝试下一个实现 由于大小的原因,我不得不将输出文件拆分为10k行块 所以,我需要在文件“out1.csv”中转储10k,在文件“out2.csv”中转储下一个10k,以此类推 通过一个输出文件,模式batch:chunk With reader-processor-writer既简单又直接 输出流在块内的batch:streams XML部分中打开,因此我避免了 “写入程序必须打开才能写入”异常 我想做一个避免这种严格的预设解决方案的实现:Spring 弹簧批处理:动态或旋转编写器,spring,spring-batch,file-writing,spring-batch-stream,Spring,Spring Batch,File Writing,Spring Batch Stream,我正在尝试下一个实现 由于大小的原因,我不得不将输出文件拆分为10k行块 所以,我需要在文件“out1.csv”中转储10k,在文件“out2.csv”中转储下一个10k,以此类推 通过一个输出文件,模式batch:chunk With reader-processor-writer既简单又直接 输出流在块内的batch:streams XML部分中打开,因此我避免了 “写入程序必须打开才能写入”异常 我想做一个避免这种严格的预设解决方案的实现: <batch:chunk reader=&
<batch:chunk reader="reader" writer="compositeWriter" commit-interval="10000" processor-transactional="false">
<batch:streams>
<batch:stream ref="writer1" />
<batch:stream ref="writer2" />
<batch:stream ref="writer3" />
.
.
.<batch:stream ref="writer20" />
</batch:streams>
</batch:chunk>
<bean id="writer1" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
<property name="resource" value="out1.csv" />
...
</bean>
<bean id="writer2" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
<property name="resource" value="out2.csv" />
...
</bean>
...
<!-- writer 20 -->
.
.
.
...
...
...
假设20个作家就足够了。
我正在寻找一种解决方案来动态地(可能是编程地)创建输出编写器,打开它们并避免上述异常
由于大小的原因,我不得不将输出文件拆分为10k行块。所以,我需要在文件“out1.csv”中转储10k,在文件“out2.csv”中转储下一个10k,以此类推
您似乎正在使用一个
复合编写器
,但这不是正确的做法。您需要使用的是,它允许您按项目计数分割输出。在您的情况下,您需要配置一个MultiResourceItemWriter
,并将itemCountLimitPerResource
设置为10.000。您还可以提供ResourceSuffixCreator
自定义输出文件名,如out1.csv
、out2.csv
等。谢谢。我会尽快试一试。还有一个问题:是否有任何方法可以按其他条件分割输出?否,此编写器旨在按项目计数分割输出文件(根据您的描述,这就是您要查找的内容)。如果要按其他条件拆分输出,则需要自定义编写器。我相信我已回答了您的问题,因此请接受以下答案:。否则,请告诉我缺少什么可以接受。好的,我接受答案。我认为按行拆分的方法与推广到按其他标准拆分的方法相同。所以,我负责我的问题,这是不对的。答案解决了问题,但不是我的问题。下次我会说得更具体一些。再说,我不明白,我很难过,因为在这个问题上投了反对票。因此我忽略了接受,但我最终接受了答案。谢谢,没问题。最重要的是帮助你。我没有否决你的问题,那不是我。您的问题是关于按行分割输出(10k行块
),我试图基于此进行回答。对于自定义条件,您可以从MultiResourceItemWriter
获得灵感,并创建自己的编写器。