在 spring 批次中有条件地将数据发送给多个写入器
Conditionally send data to multiple writers in spring batch
我的处理器中有一些逻辑,基于此我需要决定是否需要在 TableA (WriterA) 或 TableB(writer) 中写入项目
例如 Item
已提交 type
并且类型可以具有 A or B
的值,并且根据 type
中的值我需要决定 table 我需要写数据。
这可以通过使用 Classifier
来实现。以下是配置:
Writer - Writer 将设置 Classifer
来决定我们需要使用哪个 writer。基于 classfiter 输出 writer 将被决定。
@Bean
public ItemWriter<Pojo> itemWriter() {
BackToBackPatternClassifier classifier = new BackToBackPatternClassifier();
classifier.setRouterDelegate(new MyClassifier());
classifier.setMatcherMap(new HashMap<String, ItemWriter<? extends Pojo>>() {
{
put("A", WriterA);
put("B", WriterB);
}
});
ClassifierCompositeItemWriter<Pojo> writer = new ClassifierCompositeItemWriter<Pojo>();
writer.setClassifier(classifier);
return writer;
}
分类器
public class MyClassifier {
@Classifier
public String classify(Pojo Pojo) {
return Pojo.getType();
}
}
我的处理器中有一些逻辑,基于此我需要决定是否需要在 TableA (WriterA) 或 TableB(writer) 中写入项目
例如 Item
已提交 type
并且类型可以具有 A or B
的值,并且根据 type
中的值我需要决定 table 我需要写数据。
这可以通过使用 Classifier
来实现。以下是配置:
Writer - Writer 将设置 Classifer
来决定我们需要使用哪个 writer。基于 classfiter 输出 writer 将被决定。
@Bean
public ItemWriter<Pojo> itemWriter() {
BackToBackPatternClassifier classifier = new BackToBackPatternClassifier();
classifier.setRouterDelegate(new MyClassifier());
classifier.setMatcherMap(new HashMap<String, ItemWriter<? extends Pojo>>() {
{
put("A", WriterA);
put("B", WriterB);
}
});
ClassifierCompositeItemWriter<Pojo> writer = new ClassifierCompositeItemWriter<Pojo>();
writer.setClassifier(classifier);
return writer;
}
分类器
public class MyClassifier {
@Classifier
public String classify(Pojo Pojo) {
return Pojo.getType();
}
}