Исключение верблюда 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