おそらく、 を介してこれを行うことができますClassifierCompositeItemWriter
。MyDomainObject
同じ入力に示されているように、開始日と終了日の両方を持つドメイン オブジェクト (たとえば、) があると仮定します。
まず、メソッドを宣言するクラスを作成し、classify
それに注釈を付ける必要があり@Classifier
ます。これは、アイテムを下にあるアイテムライターの1つに効果的にルーティングするものです(あなたの場合、レコードの開始日と終了日が基準日にわたるかどうかに基づいて)。
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
次に、分類子によって設定された値に基づいて、基になる 2 つのアイテム ライターのいずれかに委任するように を構成する必要があります。この場合、必要に応じてセットアップし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>