Spring 批处理 - 基于字段值的多个编写器

Spring Batch - more than one writer based on field value

我正在为当前使用 FlatFileItemWriter 的作者处理 spring 批处理。

我想根据某个字段值将我的输入文件内容写入多个平面文件。 Spring 批处理是否默认支持任何类型的功能。[类似于 CompositeItemWriter 的东西]

比如我的输入文件内容是这样的

john,35,retail,10000
joe,34,homeloan,20000
Amy,23,retail,2000

现在我想根据第三列写两个不同的文件,这意味着第 1 行和第 3 行应该转到 file1,第 2 行应该转到 file2。

我的编写器配置是:

<bean id="fileWriter" class="org.springframework.batch.item.file.FlatFileItemWriter">

        <property name="resource" value="file:C:/output.dat"/>

        <property name="lineAggregator">
            <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
                <property name="delimiter" value="|" />
                <property name="fieldExtractor">
                    <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                        <property name="names" value="field1,field2...." />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>

看看ClassifierCompositeItemWriter。此 ItemWriter 实现允许您定义一个 Classifier 来选择要委托给哪个已定义委托 ItemWriter 实例。在您的情况下,您将创建一个基于 field4 决定的 Classifier 并将写入委托给 FlatFileItemWriter.

的适当实例

您可以在此处的文档中阅读有关 ClassifierCompositeItemWriter 的更多信息:http://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/item/support/ClassifierCompositeItemWriter.html

使用 ClassifierCompositeItemWriter

Calls one of a collection of ItemWriters for each item, based on a router pattern implemented through the provided Classifier.

路由器模式基于 bean 内容