【发布时间】:2018-12-20 04:17:56
【问题描述】:
我正在开发 Spring Boot Batch 示例。在此示例中,从CSV 读取数据并基于状态代码值(如SUCCESS、REJECT、PENDING、COMPLETED)我想将其写入 4 个不同的位置(MySQL、XML、Postgres , Salesforce DB) 在写 ?.我可以看到我们只能将Customers 的一种类型的列表传递给CompositeItemWriter 方法。如何将 4 个不同的 Customer 列表传递给 CompositeItemWriter ?
在这里我可以考虑使用CompositeItemProcessor 和CompositeItemWriter。在CompositeItemProcessor 中,我将决定分离所有这些处理器中的记录,现在的问题是如何将SUCCESS 传递给MYSQL,REJECT 传递给XML,PENDING 传递给Postgres和COMPLETED 到Salesforce DB?
@Bean
public CompositeItemProcessor<Customer, Customer> compositeItemProcessor() throws Exception{
List<ItemProcessor<Customer, Customer>> delegates = new ArrayList<>();
delegates.add(new FilteringSuccessProcessor());
delegates.add(new FilteringRejectProcessor());
delegates.add(new FilteringPendingProcessor());
delegates.add(new FilteringCompletedProcessor());
CompositeItemProcessor<Customer, Customer> processor = new CompositeItemProcessor<>();
processor.setDelegates(delegates);
processor.afterPropertiesSet();
return processor;
}
FilteringSuccessProcessor.java
像这样我已经创建了处理器的所有状态代码和
public class FilteringSuccessProcessor implements ItemProcessor<Customer, Customer> {
@Override
public Customer process(Customer item) throws Exception {
if(item.getStatus == "SUCCESS"){
return item;
}
else
return null;
}
}
现在我的问题是 - 我们如何将 4 个不同的数据结果传递给 CompositeItemWriter 以将其写入 4 个不同的地方?
我虽然也使用CustomerClassifier,但是如何将四个不同的列表传递给同一个作者?
有什么指导吗?这是一个非常有趣的用例,但看起来很关键。
【问题讨论】:
-
我支持@slimane 的答案,
ClassifierCompositeItemWriter是要走的路。一个类似的答案,这里有一个例子:stackoverflow.com/a/53388876/5019386
标签: spring spring-boot spring-batch