Spring batch Spring批处理-根据条件写入两个不同的文件

Spring batch Spring批处理-根据条件写入两个不同的文件,spring-batch,Spring Batch,我想将数据写入两个不同的文件。如果我的条件为真,则写入x文件,否则写入y文件 目前我有一个平面文件项编写器,可以将所有数据写入一个文件。我想指定两个不同的文件,根据条件数据应该转到相应的文件 <beans:bean id="itemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter"> <beans:property name="resource"> <b

我想将数据写入两个不同的文件。如果我的条件为真,则写入x文件,否则写入y文件

目前我有一个平面文件项编写器,可以将所有数据写入一个文件。我想指定两个不同的文件,根据条件数据应该转到相应的文件

<beans:bean id="itemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter">
    <beans:property name="resource">
        <beans:bean class="org.springframework.core.io.FileSystemResource" scope="step">
            <beans:constructor-arg value="${process.output.dir}/${output.file.name}_#{jobParameters['run.id']}.${output.file.extension}" type="java.lang.String" />
        </beans:bean>
    </beans:property>
    <beans:property name="lineAggregator">
        <beans:bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
            <beans:property name="delimiter" value="|" />
            <beans:property name="fieldExtractor">
                <beans:bean class="com.abc.common.batch.item.file.transform.FormattingFieldExtractorDecorator">
                    <beans:property name="fieldExtractor">
                        <beans:bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor" >
                            <beans:property name="names" value="${output.field.names}" />
                        </beans:bean>
                    </beans:property>
                    <beans:property name="defaultDateFormat" value="yyyyMMdd" />
                    <beans:property name="defaultDecimalFormat" value="############0.00" />
                </beans:bean>
            </beans:property>
        </beans:bean>
    </beans:property>
    <beans:property name="headerCallback">
        <beans:bean class="com.abc.common.batch.item.file.HeaderWriter">
            <beans:constructor-arg value="${output.column.names}" />
        </beans:bean>
    </beans:property>
    <beans:property name="footerCallback">
        <beans:bean class="com.abc.footer.ItemCountFooterCallback" >
            <beans:constructor-arg name="count" ref="itemCount" />
        </beans:bean>
    </beans:property>
</beans:bean>

是一条路要走。它使用
分类器
对项目进行分类(这是实现条件的地方)和多个项目编写器(每个编写器将编写一个特定的“类”项目)

你可以找到一个例子


希望这对您有所帮助。

您肯定可以做到这一点,您可以实现自定义项目编写器,然后根据您的条件,您可以完成写入不同文件的任务

但是在这种情况下——文件的状况和处理可能会影响应用程序的性能,您需要小心实现

这里我只是给你布局,你可以在你的文件中写实现写,首先写自定义项编写器-

https://www.programcreek.com/java-api-examples/index.php?api=org.springframework.batch.item.ItemWriter
然后实现一个自定义itemWriterListener,在其中使用beforeWrite方法可以设置不同的资源

 public class WriteListener implements ItemWriteListener{

@Autowire
ItemWrite writer;

 public void beforeWrite(List items) {

   condition 1 (){
       writer.setResource(1)
   }

   condition 2 (){
       writer.setResource(2)
   }    
 }

 public void onWriteError(Exception exception, List items) {

    System.out.println("Error occurred when writing items!");
 }

 public void afterWrite(List items) {

 }  

 }

您的状况是否基于物品?例如:如果项的类型为A,则将其写入fileA,否则将其写入fileB。我的条件基于项的属性。如果该属性不是空的,则写信给A,否则写信给Bok,谢谢。请看我的答案。希望有帮助。我还需要页眉和页脚回调。这些可以在代理编写器上配置。