通常,设计模式为:
Reader -> reads something, returns ReadItemProcessor -> ingests ReadItem, returns ProcessedItemWriter -> ingests List<ProcessedItem>
如果处理器返回
List<Object>,则需要Writer期望
List<List<Object>>。
您可以通过将您
JdbcBatchItemWriter的委托包装在看起来像这样的ItemWriter中来实现:
public class ListUnpackingItemWriter<T> implements ItemWriter<List<T>>, ItemStream, InitializingBean { private ItemWriter<T> delegate; @Override public void write(final List<? extends List<T>> lists) throws Exception { final List<T> consolidatedList = new ArrayList<>(); for (final List<T> list : lists) { consolidatedList.addAll(list); } delegate.write(consolidatedList); } @Override public void afterPropertiesSet() { Assert.notNull(delegate, "You must set a delegate!"); } @Override public void open(ExecutionContext executionContext) { if (delegate instanceof ItemStream) { ((ItemStream) delegate).open(executionContext); } } @Override public void update(ExecutionContext executionContext) { if (delegate instanceof ItemStream) { ((ItemStream) delegate).update(executionContext); } } @Override public void close() { if (delegate instanceof ItemStream) { ((ItemStream) delegate).close(); } } public void setDelegate(ItemWriter<T> delegate) { this.delegate = delegate; }}


