您可能可以通过ClassifierCompositeItemWriter
. 我将假设您有一个域对象(例如,MyDomainObject
),它具有相同输入中显示的开始日期和结束日期。
您首先需要创建一个声明classify
方法的类并用@Classifier
. 这将有效地将项目路由给下级项目作者之一(在您的情况下,基于记录的开始日期和结束日期是否跨越参考日期)。
import org.springframework.batch.support.annotation.Classifier;
public class MyDateClassifierDelegate {
//set this via Spring, or whatever
private final Date referenceDate;
@Classifier
public String classify(MyDomainObject classifiable) {
if(classifiable.startDate.compareTo(referenceDate) < 0
&& classifiable.endDate.compareTo(referenceDate) >= 0) {
return "FILE1";
}
else {
return "FILE2";
}
}
}
接下来,您需要ClassifierCompositeItemWriter
根据分类器设置的值将 配置为委托给两个底层项目编写器之一。在这种情况下,您将根据需要进行设置file1Writer
,file2Writer
我收集的只是平面文件项目编写器。
<beans:bean id="dateRangeBasedFileWriter" class="org.springframework.batch.item.support.ClassifierCompositeItemWriter">
<beans:property name="classifier">
<beans:bean class="org.springframework.batch.classify.BackToBackPatternClassifier">
<beans:property name="routerDelegate">
<!-- this is where you specify the classifier that is to be used -->
<beans:bean class="MyDateClassifierDelegate" />
</beans:property>
<beans:property name="matcherMap">
<beans:map>
<!-- this will contain your "spanning reference date" items -->
<beans:entry key="FILE1" value-ref="file1Writer" />
<!-- this will contain your "not spanning reference date" items -->
<beans:entry key="FILE2" value-ref="file2Writer" />
</beans:map>
</beans:property>
</beans:bean>
</beans:property>
</beans:bean>