我正在尝试将postgres中的数据摄取到另一个DB中,并且我正在使用camel-jdbc组件来完成此操作。我有一个很大的表,所以我想一次读取几行,而不是整个表。因此,我的路由如下所示(仅用于测试目的),来自(FromUri).setBody(“select* from table limit 10").to("jdbc://myDataSource?resetAutoCommit=false&statement.fetchSize=2").split(body()).streaming().process(test)
如上所示,出于测试目的,我一次只接收10行,并且我将fetchSize设置为2,以便一次只接收2行。但是,我仍然总共收到了所有10行。当我从查询中删除"limit 10“时,就在split命令之前,我得到了Out of memory错误,这告诉我它试图将整个结果集加载到内存中。
我在这里遗漏了什么,或者我做错了什么?
谢谢你的帮助。
发布于 2016-05-24 20:50:38
我认为fetchSize更多地是对JDBC驱动程序的一种暗示。你可以使用maxRows选项在服务器端进行真正的限制,例如statement.maxRows=2。您可以在JDBC javadoc文档上阅读有关这些选项的更多信息。
https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html
https://stackoverflow.com/questions/37395970
复制相似问题