2015-08-24 2 views
1

Я работаю над обработкой большого файла с CSV-форматом, и я использовал split для разрыва CSV. Вот пример формата файла:Сплит и сборщик верблюдов

**Item1,Item2,Item3,Item4 
    Item1,Item5,Item7,Item2** 

Вот мой маршрут информация:

<route> 
    <from uri="file://Data/groupedDocs?preMove=staging&amp;delete=false" /> 
    <split streaming="true" parallelProcessing="true"> 
    <tokenize token="\n" group="1" /> 
    <to uri="bean:groupProcessor" /> 
    </split> 
    <log message="File Sent!!!"/> 
</route> 

В приведенном выше коде, мой groupProcessor обрабатывает отдельные строки из файла CSV.

Проблема в том, как я могу узнать, были ли обработаны все записи? Может быть 10 или 100 записей. Я видел шаблон агрегатора, но проблема в том, что я не хочу собирать данные, то есть я не читаю все записи и не сбрасываю их в файл. Я создаю новый файл для каждой строки из файла CSV. Возможно также, что некоторые из строк в файле CSV могут генерировать ошибку, поэтому для записей с ошибками я не создаю никакого нового файла. Например. в CSV-файле у меня есть 10 строк, и из них 2 бросают какое-то исключение, поэтому мне придется записывать эти 2 как исключения и генерировать 8 файлов для остальной записи. В конце концов, мне также необходимо сохранить количество новых файлов, сгенерированных и ошибочных. Кто-нибудь может помочь здесь?

+0

См. Этот ответ моей стратегии агрегации верблюдов http://stackoverflow.com/questions/26346772/camel-aggregation-strategy/26348903#26348903 – Namphibian

ответ

0

Вы можете установить флаг в заголовке, если возникло исключение, и вы можете считать эти флаги в aggregationStrategy (раздел Split aggregate request/reply sample). Стратегия атрибутаRef в xml

Смежные вопросы