以下解决方案对我有用。编译了代码,它工作正常。
首先,您需要一个分类器。要么实现 Classifier 接口,要么使用 @Classifier 注释分类()方法。
这里我使用了注解。
public class MyClassifier {
@Classifier
public String classify(Policy pol) {
return pol.getPolCode;// returns "01", "02"
}
}
添加分类器 bean
<bean id="myClassifier" class="org.springframework.batch.classify.BackToBackPatternClassifier">
<property name="routerDelegate">
<bean class="MyClassifier" />
</property>
<property name="matcherMap">
<map>
<entry key="01" value-ref="pol01ItemWriter" />
<entry key="02" value-ref="pol02ItemWriter" />
</map>
</property>
</bean>
添加您的作家bean,如下所示
<bean id="ItemWriter" class="org.springframework.batch.item.support.ClassifierCompositeItemWriter">
<property name="myClassifier" ref="myClassifier" />
</bean>
上面的代码可能会抛出 WriterNotOpenException。为此,您需要将 batch:stream 添加到步骤中。
<batch:step id="step1">
<batch:tasklet>
<batch:chunk reader="reader" processor="processor" writer="ItemWriter" commit-interval="3">
<batch:streams>
<batch:stream ref="pol01ItemWriter"/>
<batch:stream ref="pol02ItemWriter"/>
</batch:streams>
</batch:chunk>
</batch:tasklet>
</batch:step>