如何根据返回对象配置单个读取器并调用多个写入器Spring批处理作业 [英] How to configure a Spring batch job with single reader and calling multiple writers depending on object returned
本文介绍了如何根据返回对象配置单个读取器并调用多个写入器Spring批处理作业的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
下面是我当前使用的作业文件。
<batch:job id="job1">
<batch:step id="step1">
<batch:tasklet>
<batch:chunk reader="reader" processor="processor" writer="ItemWriter" commit-interval="3">
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:job>
推荐答案
正如卢卡的评论中所说,您可以使用需要org.springframework.classify.Classifier
的ClassifierCompositeItemWriter
。
后者的少数实现之一是org.springframework.classify.BackToBackPatternClassifier
,它依次接受routerDelegate
和matcherMap
。
routerDelegate
是一个bean,它将有一个用@Classifier
注释的方法。此方法将接受Object
并返回String
。然后将此字符串与您在module-context
中声明的值进行匹配,并相应地调用ItemWriter
。
举个例子:
<bean class="org.springframework.batch.item.support.ClassifierCompositeItemWriter">
<property name="classifier">
<bean class="org.springframework.classify.BackToBackPatternClassifier">
<property name="routerDelegate">
<bean class="xx.xx.xx.YourClassifier"></bean>
</property>
<property name="matcherMap">
<map>
<entry key="value1">
<bean class="xx.xx.xx.YourItemWriter1></bean>
</entry>
<entry key="value2">
<bean class="xx.xx.xx.YourItemWriter2></bean>
</entry>
</map>
</property>
</bean>
</property>
</bean>
下面是分类器的外观(这是一个使用Reflect API调用作为参数传递给对象的方法的泛型分类器):
public class GenericClassifier<T> {
private String methodName;
@Classifier
public String classify(T classifiable) {
Method method;
String value = "";
try {
// Get the method with Reflect
method = classifiable.getClass().getMethod(methodName);
// Call the method with Reflect
value= (String) method.invoke(classifiable);
} catch (Exception e) {
// Error management
}
return value;
}
public void setMethodName(String methodName) {
this.methodName = methodName;
}
}
这个分类器的用法是这样的,其中YourMethod
是要分类的Object的类的公共方法(不带括号):
<bean class="xx.xx.xx.GenericClassifier">
<property name="methodName" value="YourMethod"></property>
</bean>
然后将Classifier
返回的value
字符串与matcherMap
的相应entry
的key
匹配。
这篇关于如何根据返回对象配置单个读取器并调用多个写入器Spring批处理作业的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文