Исключение верблюда jdbc из памяти

Я пытаюсь загрузить данные из postgres в другую БД и для этого использую компонент camel-jdbc. У меня большая таблица, поэтому я хочу читать несколько строк за раз вместо всей таблицы. поэтому мой маршрут выглядит следующим образом (только для целей тестирования) из (fromUri).setBody("select * from limit limit 10").to("jdbc://myDataSource?resetAutoCommit=false& Statement.fetchSize=2").split(тело ()). потоковый (). процесс (тест)

Как показано выше, я получаю только 10 строк за один раз для целей тестирования, и я установил fetchSize равным 2, чтобы получать только 2 строки за раз. Тем не менее, я все еще получаю все 10 строк в целом. Когда я удаляю "предел 10" из запроса, я получаю ошибку "Недостаточно памяти" непосредственно перед командой split, которая сообщает мне, что она пытается загрузить весь набор результатов в память.

Что мне здесь не хватает или что я делаю не так?

Спасибо за помощь.

1 ответ

Я думаю, что fetchSize - это скорее подсказка для драйвера JDBC. Вы можете использовать опцию maxRows, чтобы реально ограничивать на стороне сервера, например statement.maxRows=2, Вы можете прочитать больше об этих опциях в документации JDBC Javadoc.

https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html

Другие вопросы по тегам