Spring Batch: динамический или вращающийся писатель

Я пытаюсь сделать следующую реализацию.

По причинам, связанным с размером, мне приходится разбивать выходной файл, например, на блоки по 10 тыс. Строк.

Итак, мне нужно выгрузить 10 КБ в файл «out1.csv», следующие 10 КБ в файл «out2.csv» и так далее.

С одним выходным файлом пакет схемы: блок с функцией чтения-процессора-записи выполняется легко и прямо.

Выходной поток открывается пакетно: потоки XML-раздела внутри фрагмента, поэтому я избегаю исключения «Writer должен быть открыт, прежде чем он может быть записан в».

Я хочу реализовать реализацию, избегающую этого строгого и предустановленного решения:

      <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 писателей вполне достаточно. Я ищу решение для динамического создания средств записи вывода (возможно, программно), их открытия и исключения вышеуказанного исключения.

1 ответ

По причинам, связанным с размером, мне приходится разбивать выходной файл, например, на блоки по 10 тыс. Строк. Итак, мне нужно сбросить 10 КБ в файл «out1.csv», следующие 10 КБ в файл «out2.csv» и так далее.

Вы, кажется, используете CompositeItemWriter, но это не выход. Что вам нужно использовать, так это MultiResourceItemWriter, который позволяет разделить вывод по количеству элементов. В вашем случае вам нужно будет настроить MultiResourceItemWriter и установите itemCountLimitPerResourceдо 10.000. Вы также можете предоставить ResourceSuffixCreator чтобы настроить имена выходных файлов, например out1.csv, out2.csv, так далее.

Другие вопросы по тегам