2016-05-23 7 views
0

私はpostgresから別のDBにデータを取り込みしようとしており、camel-jdbcコンポーネントを使用しています。私は大きなテーブルを持っているので、テーブル全体ではなく、一度にいくつかの行を読みたいと思っています。私のルートは以下のようになります(テスト目的のみ) from(fromUri).setBody( "select * from table limit 10").to( "jdbc:// myDataSource?resetAutoCommit = false & statement.fetchSize = 2") 上記のように、テスト目的では一度に10行しか取得できません。フェッチサイズを2に設定して、2行しか受け取らないようにしました。時間。しかし、私はまだ全部で10行を受け取っています。クエリから "limit 10"を削除すると、分割コマンドの直前にメモリ不足エラーが表示され、メモリに結果セット全体をロードしようとしていることがわかります。camel jdbcメモリ不足例外

私はここで何が間違っているのですか、何が間違っていますか?

ありがとうございました。

答えて

0

私はfetchSizeがJDBCドライバのヒントのほうが良いと思います。 maxRowsオプションを使用して、サーバ側で実際に制限することができます(例:statement.maxRows=2)。これらのオプションの詳細については、JDBC javadocドキュメントを参照してください。 = 2 doesntのは本当に仕事

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

+0

statement.maxRows。それは2行だけを返し、残りの8行は私が望んでいないものを破棄します。 – Pri

+0

Camel JDBC uriにoutputType = StreamListを設定し、ドキュメントを読んでください:http://camel.apache.org/jdbc –

+0

私はすでにそれを試みました。私のルートがどこから始まったのか(fromUri).setBody(select * from table).to( "jdbc:// myDataSource?outputType = StreamList).split(body()).streaming().processテスト)上記のルートは、メモリ内のテーブルからすべてのデータをロードしようとすると処理され、ボディを分割する前にメモリエラーをスローします。 – Pri

関連する問題