LoginSignup
1
1

More than 5 years have passed since last update.

jOOQが巨大なリザルトセットをフェッチするとOOMエラーが出る場合にデフォルトフェッチサイズを設定する方法

Last updated at Posted at 2019-04-10

jOOQが巨大なリザルトセットをストリーム的にフェッチするようにしたにもかかわらず、OutOfMemoryErrorとかになっちゃう場合は、おそらくフェッチサイズが無限の状態(PostgreSQLドライバの場合)になっているので、以下のXMLファイルをクラスパスのルート直下において、 jOOQのフェッチサイズのデフォルト設定値として使われるようにしましょう。

(詳しい処理はorg.jooq.conf.SettingsTools参照)

src/main/resources/jooq-settings.xml
<?xml version="1.0" ?>

<settings
        xmlns="http://www.jooq.org/xsd/jooq-runtime-3.11.2.xsd"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <!-- 適当なサイズを指定してください。 -->
    <fetchSize>1000</fetchSize>

</settings>

なお、上記設定にあわせて、上記のXMLをJavaBeansにアンマーシャルするために、下記の依存性が別途必要になります。追加しましょう。

build.gradle
    // 場合によりバージョン指定など異なると思うので適当な値を探してください。

    runtime('javax.activation:activation:1.1.1')
    runtime("com.sun.xml.bind:jaxb-impl:...")
    runtime("com.sun.xml.bind:jaxb-core:...")

SpringBootでも同じ

SpringBootで spring-boot-starter-jooq を使っていたとしても、上記と同じ設定を application.properties などで実施する方法はなさそうなので、あきらめてXMLファイルを置くなりしましょう。

ほかの方法(PostgreSQLの場合)

同僚の人に教えてもらいました。

PostgreSQLのJDBC URLに下記文字列をつければ良いようです。

&defaultRowFetchSize=1000
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1