gpt4 book ai didi

spring-batch - 如何使用单个读取器配置 Spring 批处理作业并根据返回的对象调用多个写入器

转载 作者:行者123 更新时间:2023-12-04 04:47:32 24 4
gpt4 key购买 nike

下面是我目前正在使用的作业文件。

<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>

最佳答案

正如 Luca 的评论中所说,您可以使用需要 org.springframework.classify.ClassifierClassifierCompositeItemWriter

后者的少数实现之一是 org.springframework.classify.BackToBackPatternClassifier,它依次采用 routerDelegatematcherMap

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是待分类对象的类的公共(public)方法(不带括号):

<bean class="xx.xx.xx.GenericClassifier">
<property name="methodName" value="YourMethod"></property>
</bean>

Classifier 返回的 value 字符串然后与相应的 entrykey 相匹配matcherMap.

关于spring-batch - 如何使用单个读取器配置 Spring 批处理作业并根据返回的对象调用多个写入器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33330171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com