如果项目编写者将2条记录写入文件A,将1条记录写入文件B,则两个文件(A和B)的预告片计数均为3。
我有一个阅读器,处理器和ClassifierCompositeItemWriter。在分类器中,我有两个项目编写器,它们提供有效输出,但页脚回调不正确。尽管记录计数不同,但两个文件预告片计数都相同。
<batch:job id="abc-job" parent="xyzJob">
<batch:step id="inputfile">
<batch:tasklet>
<batch:chunk reader="itemReader" processor="itemProcessor" writer="itemWriter" commit-interval="1000" >
<batch:streams>
<batch:stream ref="AFileWriter"/>
<batch:stream ref="BFileWriter"/>
</batch:streams>
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:job>
<beans:bean id="itemWriter" class="org.springframework.batch.item.support.ClassifierCompositeItemWriter">
<beans:property name="classifier" ref="classifier" />
</beans:bean>
<beans:bean id="classifier" class="org.springframework.batch.classify.BackToBackPatternClassifier">
<beans:property name="routerDelegate">
<beans:bean class="com.abc.classifier.MyClassifier" />
</beans:property>
<beans:property name="matcherMap">
<beans:map>
<beans:entry key="A" value-ref="AFileWriter" />
<beans:entry key="B" value-ref="BFileWriter" />
</beans:map>
</beans:property>
</beans:bean>
<beans:bean id="1FileWriter" parent="parentItemWriter1">
<beans:property name="name" value="AFileWriter"/>
<beans:property name="resource" ref="AFile"/>
</beans:bean>
<beans:bean id="2FileWriter" parent="parentItemWriter2">
<beans:property name="name" value="BFileWriter"/>
<beans:property name="resource" ref="BFile"/>
</beans:bean>
页脚回调-
public class ItemCountFooterCallback implements FlatFileFooterCallback
{
private AtomicInteger count;
public ItemCountFooterCallback(final AtomicInteger count)
{
this.count = count;
}
public void writeFooter(final Writer writer) throws IOException
{
writer.append("Trailer " + this.count.toString());
}
}
我希望A和B文件的预告片记录的输出是该特定文件的确切数字行。
答案 0 :(得分:0)
footerCallback
是在步骤级别注册的,因此它将使用步骤的write.count
,即已写项目的总数(在您的情况下为3)。
您可以做的是为每个编写器(例如,writer1.count
和writer2.count
)和每个编写器上的set a footer callback(而不是步骤级别)具有一个写计数。每个页脚回调都应写入其附加到的编写器的项目计数。