2016-05-23 4 views
0

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

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

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

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

ответ

0

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

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

+0

statement.maxRows = 2 реально не работает. все, что он делает, это возвращает только 2 строки и отбрасывает оставшиеся 8 строк, что не то, что я хочу. – Pri

+0

Установить outputType = StreamList в url Jelbel Camel и прочитать документацию: http://camel.apache.org/jdbc –

+0

Я уже пробовал это. То, откуда я первоначально начинался, где мой маршрут выглядел как (fromUri) .setBody (выберите * из таблицы) .to ("jdbc: // myDataSource? OutputType = StreamList) .split (body()) .streamstream() .process (тест). Вышеуказанный маршрут не обрабатывается событием, поскольку он пытается загрузить все данные из таблицы в памяти и выкидывает из памяти ошибку перед расщеплением тела. – Pri