【发布时间】:2016-02-25 08:24:54
【问题描述】:
Oracle 的行预取大小为 10,这对于我们通过 JOOQ 执行的查询来说通常太小了。但是,应用程序的大部分使用 JPA,因此我们无法在不增加 GC 活动的情况下增加 fetch 大小。
我正在尝试为 JOOQ 查询设置默认提取大小,以便
dsl.selectZero().from("DUAL").fetch(); // fetchSize: 100
dsl.selectZero().from("DUAL").fetchSize(123).fetch(); // fetchSize: 123
只有 JOOQ 查询会受到影响,这一点很重要。我如何实现这一目标?我想出的唯一解决方案如下:
- 使
AbstractResultQuery.fetchSize可通过反射访问 - 有一个
ExecuteListener其prepareEnd回调- 如果可能,将
ctx.query()向下转换为AbstractResultQuery - 通过反射读取
AbstractResultQuery.fetchSize
- 如果可能,将
但这显然违反了 API 边界,可能有一天会中断。有没有更好的解决方案?
PS:同样的问题也适用于其他 JDBC 参数,例如 queryTimeout。
【问题讨论】: