我的流程将数据转换为 SCD2模式。因此,源数据中的任何更新最终都会更新active_ind
& dimension
表中的ItemReader
并插入新记录。
我在{{1}}实现中配置了SQL,用于标识源数据中已更改的记录。
我需要有关如何将数据路由到2个编写器的帮助/建议,每个编写器1个用于更新&插入
答案 0 :(得分:1)
Spring在这种用例中有一个通用模式,而不一定是使用Classifier Interface的Spring Batch。
您可以使用此界面的BackToBackPatternClassifier implementation 。
此外,您需要使用提供的ClassifierCompositeItemWriter
Spring Batch。
以下是步骤摘要:
传递给writer的POJO / Java Bean应该有某种String字段,可以识别该POJO的目标ItemWriter
。
然后你写一个Classifier
,为每个POJO返回那个String类型:
public class UpdateOrInsertClassifier {
@Classifier
public String classify(WrittenMasterBean writtenBean){
return writtenBean.getType();
}
}
和
@Bean
public UpdateOrInsertClassifier router() {
return new UpdateOrInsertClassifier();
}
我认为WrittenMasterBean
是您发送给任一作者的POJO,并且它有private String type;
字段此Classifier
是您的路由器。
BackToBackPatternClassifier
之类的 - @Bean public Classifier classifier() { BackToBackPatternClassifier classifier = new BackToBackPatternClassifier(); classifier.setRouterDelegate(router()); Map<String,ItemWriter<WrittenMasterBean>> writerMap = new HashMap(); writerMap.put("Writer1", writer1()); writerMap.put("Writer2", writer2()); classifier.setMatcherMap(writerMap); return classifier; }
即。我假设密钥Writer1
和Writer2
将标识您的特定bean的编写者。
writer1()
和writer2()
返回实际的ItemWriter
bean。
BackToBackPatternClassifier
需要两个字段 - 一个路由器分类器和另一个匹配器映射。
限制是键是此分类器中的字符串。您不能使用任何其他类型的密钥。
BackToBackPatternClassifier
传递给ClassifierCompositeItemWriter
- 您需要使用提供的Spring Batch ClassifierCompositeItemWriter @Bean public ItemWriter<WrittenMasterBean> classifierWriter(){ ClassifierCompositeItemWriter<WrittenMasterBean> writer = new ClassifierCompositeItemWriter(); writer.setClassifier(classifier()); return writer; }
您可以将此classifierWriter()
配置到Step
。
然后你很高兴。