#file #apache-camel #jsonpath
#файл #апач-верблюд #путь к jsonpath
Вопрос:
Я пытаюсь использовать большой файл JSON с записями в виде массива JSON, используя apache camel. Я использую функцию split() с jsonpath(«$») для разделения записей, которая возвращает Map и отлично работает с небольшими файлами. Но для больших файлов он загружает все в память и вызывает outofmemoryerror.
Вот код. Есть какие-нибудь предложения, как обращаться с большими файлами?
from("file://{{data.file.inbound}}?charset=utf-8amp;readLock=changedamp;move={{data.file.processed}}amp;moveFailed={{data.file.failed}}")
.id("file-to-mongodb").split().jsonpath("$").streaming()
.to("log:com.manoj.oneByone");
Комментарии:
1. Вы должны использовать потоки для загрузки файлов по частям
2. Я удивлен, что у вас проблемы с памятью, так как вы уже используете
.streaming()
in в своем маршруте. Я делаю то же самое для CSV-файлов, и это очень хорошо работает с большими файлами. Возможно ли, чтоjsonpath
выражение принудительно выполняет полную загрузку файла?3. Да, jsonpath загружает все записи в память в виде карты, и это вызывает все проблемы.