Я разрабатываю Spring Boot Batch пример.В этом примере, считывая данные из CSV
и основываясь на значениях кода состояния (например, SUCCESS
, REJECT
, PENDING
, COMPLETED
), я хочу записать их в 4 разных места (MySQL, XML, Postgres, Salesforce DB) пока пишешь?Я вижу, что мы можем передать только 1 тип списка из 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
, но как передать четыре разных спискаодному и тому же писателю?
Есть указания?Это очень интересный вариант использования, но для реализации он выглядит критически важным.