Spring 批处理:动态或轮换编写器
Spring Batch: dynamic or rotate writer
我正在尝试进行下一个实现。
由于大小原因,我必须将输出文件拆分为 10k 行的块。
所以,我需要在文件“out1.csv”中转储 10k,在文件“out2.csv”中转储下一个 10k,依此类推。
使用一个输出文件,使用 reader-processor-writer 的架构 batch:chunk 简单直接。
输出流在块内的 batch:streams XML 部分打开,所以我避免了
“编写器必须先打开才能写入”异常。
我想做一个避免这个严格的预设解决方案的实现:
<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个写手就够了。
我正在寻找一种动态(可能以编程方式)创建输出编写器的解决方案,打开它们并避免上述异常。
Due to size reasons, I have to split my output file in, for example, 10k row chunks. So, I need to dump 10k in file "out1.csv", the next 10k in file "out2.csv", and so on.
您似乎在使用 CompositeItemWriter
,但这不是正确的方法。您需要使用的是 MultiResourceItemWriter ,它允许您按项目计数拆分输出。在您的情况下,您需要配置 MultiResourceItemWriter
并将 itemCountLimitPerResource
设置为 10.000。您还可以提供 ResourceSuffixCreator
来自定义输出文件名,例如 out1.csv
、out2.csv
等
我正在尝试进行下一个实现。
由于大小原因,我必须将输出文件拆分为 10k 行的块。
所以,我需要在文件“out1.csv”中转储 10k,在文件“out2.csv”中转储下一个 10k,依此类推。
使用一个输出文件,使用 reader-processor-writer 的架构 batch:chunk 简单直接。
输出流在块内的 batch:streams XML 部分打开,所以我避免了 “编写器必须先打开才能写入”异常。
我想做一个避免这个严格的预设解决方案的实现:
<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个写手就够了。 我正在寻找一种动态(可能以编程方式)创建输出编写器的解决方案,打开它们并避免上述异常。
Due to size reasons, I have to split my output file in, for example, 10k row chunks. So, I need to dump 10k in file "out1.csv", the next 10k in file "out2.csv", and so on.
您似乎在使用 CompositeItemWriter
,但这不是正确的方法。您需要使用的是 MultiResourceItemWriter ,它允许您按项目计数拆分输出。在您的情况下,您需要配置 MultiResourceItemWriter
并将 itemCountLimitPerResource
设置为 10.000。您还可以提供 ResourceSuffixCreator
来自定义输出文件名,例如 out1.csv
、out2.csv
等