Вы можете создать пользовательский ItemWriter
, который объединит несколько ItemWriter
для обработки определенного c случая. Например, предположим, что есть два случая, которые требуют различного ItemWriter
. Case1 требует записи в table1 и table2:
@Component
public class Case1ItemWriter implements ItemWriter<Foo> {
@Autowired
private JdbcBatchItemWriter writer1; //write to table1
@Autowired
private JdbcBatchItemWriter writer2; //write to table2
@Override
public void write(List<? extends T> items) throws Exception{
writer1.write(items);
wrtire2.write(items)
}
}
И case2 требует записи в table3 и table4:
@Component
public class Case2ItemWriter implements ItemWriter<Foo> {
@Autowired
private JdbcBatchItemWriter writer3; //write to table3
@Autowired
private JdbcBatchItemWriter writer4; //write to table4
@Override
public void write(List<? extends T> items) throws Exception{
writer3.write(items);
wrtire4.write(items)
}
}
Затем реализует Classifier
, чтобы определить различные случаи для возврата их собственные ItemWriter
:
@Component
public class MyClassifier implements Classifier<Foo ,ItemWriter<Foo>> {
@Autowired
private Case1ItemWriter case1ItemWriter;
@Autowired
private Case2ItemWriter case2ItemWriter;
@Override
public ItemWriter<Foo> classify(Foo foo){
if(foo.isBlabBlaBla()){
return case1ItemWriter;
}else{
......
return case2ItemWriter;
}
}
}
и настройте этот Classifier
для ClassifierCompositeItemWriter
.