Если создатели элементов записывают 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 будут точными номерами строк этого конкретного файла.