簡體   English   中英

春季批項目拆分器

[英]Spring batch item splitter

我有以下問題:我有一個文件,其中每一行導致1個或多個項目被寫入數據庫。 我需要從另一個系統進行查找,以找出需要寫多少個項目。 一行中的每個項目都必須使用一系列項目處理器進行轉換,並最終寫入數據庫的多個表中。

因為每個項目都需要寫入多個表,所以每個項目都必須處於各自的事務中。 因此,我不能只擁有一個處理它的ItemProcessor<Foo, List<Bar>> 在那種情況下-即使commit-interval為1-我最終也會在同一事務中遇到多個項目。

我已經看到了這個堆棧溢出問題。 由於交易問題,接受的答案對我沒有幫助。 關於使用Spring Integration splitter的另一個答案聽起來很有趣。 但是,它沒有提供很多細節。 如何將閱讀器的輸出定義為通道輸入? 我將如何定義一個輸出通道,該通道可用於我的項目編寫器? 我如何仍可以在每個新划分的物料上運行物料處理器鏈?

我無法在春季批處理作業中使用拆分器找到任何示例。 任何建議,將不勝感激。

FlatFileItemReader遇到了同樣的問題,但是減去了事務問題。 這樣處理:

public class FlatFileItemListWriter<T> extends FlatFileItemWriter<T> {

    /**
     * {@inheritDoc}
     * 
     * @see org.springframework.batch.item.file.FlatFileItemWriter#write(java.util.List)
     */
    @Override
    @SuppressWarnings("unchecked")
    public void write(List<? extends T> itemsLists) throws Exception {
        List<T> items = new ArrayList<T>();
        for (Object item : itemsLists) {
            items.addAll((List<T>) item);
        }
        super.write(items);
    }

}

這樣,FlatFileItemWriter處理列表的方式與我的處理器不生成列表時的方式相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM