不能嵌套塊,所以你可以把你自己的CompositeItemReader像(僞代碼):
class CompositeItemReader implements ItemReader<Transaction> {
ItemReader<Promotion> promotions;
ItemReader<Transaction> transactions;
public void setPromotions(ItemReader<Promotion> promotions) {...}
public Transaction read() {
Transaction item = transactions.read();
if(null == item) {
Promotion p = promotions.read();
if(null != p) {
// Close transactions reader, create dynamic query and open transaction reader
// Re-read item!
item = this.read();
}
}
return item;
}
}
但記得要登記促銷和交易作爲流並記住管理重啓。
或者,如果你確定每個振興有關聯交易的限制列表<>,你可以使用一個ItemProcessor<Promotion,List<Transaction>>
,其將像(駕駛基於查詢的ItemReaders)單促銷:
class PromotionProcessor implements ItemProcessor<Promotion,List<Transaction>> {
public List<Transaction> process(Promotion item) {
Query q = <create dynamic query>;
return q.list();
}
}
否則的解決方案基於PeekableItemReader和數據持有者就像一個描述here
希望這種考慮可以幫助!做得好!
您是否找到其他解決方案?我很感興趣,因爲在不太長的時間裏,我會面臨同樣的問題 –