Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 弹簧批处理:动态或旋转编写器_Spring_Spring Batch_File Writing_Spring Batch Stream - Fatal编程技术网

Spring 弹簧批处理:动态或旋转编写器

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=&

我正在尝试下一个实现

由于大小的原因,我不得不将输出文件拆分为10k行块

所以,我需要在文件“out1.csv”中转储10k,在文件“out2.csv”中转储下一个10k,以此类推

通过一个输出文件,模式batch:chunk With reader-processor-writer既简单又直接

输出流在块内的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个作家就足够了。 我正在寻找一种解决方案来动态地(可能是编程地)创建输出编写器,打开它们并避免上述异常

由于大小的原因,我不得不将输出文件拆分为10k行块。所以,我需要在文件“out1.csv”中转储10k,在文件“out2.csv”中转储下一个10k,以此类推


您似乎正在使用一个
复合编写器
,但这不是正确的做法。您需要使用的是,它允许您按项目计数分割输出。在您的情况下,您需要配置一个
MultiResourceItemWriter
,并将
itemCountLimitPerResource
设置为10.000。您还可以提供
ResourceSuffixCreator
自定义输出文件名,如
out1.csv
out2.csv
等。谢谢。我会尽快试一试。还有一个问题:是否有任何方法可以按其他条件分割输出?否,此编写器旨在按项目计数分割输出文件(根据您的描述,这就是您要查找的内容)。如果要按其他条件拆分输出,则需要自定义编写器。我相信我已回答了您的问题,因此请接受以下答案:。否则,请告诉我缺少什么可以接受。好的,我接受答案。我认为按行拆分的方法与推广到按其他标准拆分的方法相同。所以,我负责我的问题,这是不对的。答案解决了问题,但不是我的问题。下次我会说得更具体一些。再说,我不明白,我很难过,因为在这个问题上投了反对票。因此我忽略了接受,但我最终接受了答案。谢谢,没问题。最重要的是帮助你。我没有否决你的问题,那不是我。您的问题是关于按行分割输出(
10k行块
),我试图基于此进行回答。对于自定义条件,您可以从
MultiResourceItemWriter
获得灵感,并创建自己的编写器。