2016-05-23 5 views
0

Ich versuche, Daten von Postgres in eine andere Datenbank aufzunehmen, und ich verwende Camel-JDBC-Komponente, um es zu tun. Ich habe einen großen Tisch, also möchte ich nur einige Zeilen gleichzeitig lesen, anstatt den ganzen Tisch. So sieht meine Route wie folgt aus (nur für Testzwecke): from (fromUri) .setBody ("select * from table limit 10") .to ("jdbc: // meineDatenquelle? resetAutoCommit = false & statement.fetchSize = 2") .split (body()). streaming() .process (test)camel jdbc out of memory Ausnahme

Wie oben gezeigt, bekomme ich nur 10 Zeilen zu Testzwecken und ich habe fetchSize auf 2 gesetzt, um nur 2 Zeilen bei a zu erhalten Zeit. Ich bekomme jedoch immer noch alle 10 Zeilen. Wenn ich die "Grenze 10" von der Abfrage entferne, bekomme ich einen Speichermangel-Fehler kurz vor dem Split-Befehl, der mir sagt, dass er versucht, das gesamte Ergebnis in den Speicher zu laden.

Was fehlt mir hier oder was mache ich falsch?

Vielen Dank für Hilfe.

Antwort

0

Ich denke, FetchSize ist eher ein Hinweis auf den JDBC-Treiber. Sie können die Option maxRows verwenden, um auf der Serverseite wirklich zu begrenzen, z. B. statement.maxRows=2. Sie können mehr über diese Optionen in der JDBC-Javadoc-Dokumentation lesen.

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

+0

statement.maxRows = 2 tut wirklich funktionieren. Alles was es tut, ist, dass es nur 2 Zeilen zurückgibt und die restlichen 8 Zeilen verwirft, was nicht das ist, was ich möchte. – Pri

+0

Setzen Sie outputType = StreamList in der Camel JDBC uri und lesen Sie die Dokumentation: http://camel.apache.org/jdbc –

+0

Ich habe das schon versucht. Dort wo ich ursprünglich angefangen habe, wo meine Route wie aus (fromUri) .setBody (wählen Sie * aus der Tabelle) .to ("jdbc: // myDataSource? OutputType = StreamList) .split (body()) .streaming() .prozess (Die obige Route wird nicht verarbeitet, da sie versucht, alle Daten aus der Tabelle im Speicher zu laden, und vor dem Aufteilen des Körpers einen Speicherfehler auslöst. – Pri