Spring Batch - 基于字段值的多个编写器

时间:2015-04-08 17:03:42

标签: java spring-batch

我正在为春季批处理工作,目前正在使用FlatFileItemWriter。

我想根据某些字段值将输入文件内容写入多个平面文件。 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>

2 个答案:

答案 0 :(得分:4)

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

您可以在此处的文档中详细了解ClassifierCompositeItemWriterhttp://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/item/support/ClassifierCompositeItemWriter.html

答案 1 :(得分:1)

使用ClassifierCompositeItemWriter

  

根据a为每个项目调用一个ItemWriters集合之一   路由器模式通过提供的分类器实现。

路由器模式基于bean内容