Spring batch Spring批处理-根据条件写入两个不同的文件
我想将数据写入两个不同的文件。如果我的条件为真,则写入x文件,否则写入y文件 目前我有一个平面文件项编写器,可以将所有数据写入一个文件。我想指定两个不同的文件,根据条件数据应该转到相应的文件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
<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,谢谢。请看我的答案。希望有帮助。我还需要页眉和页脚回调。这些可以在代理编写器上配置。