2016-03-30 5 views
1

SpringBoot(1.3.3.RELEASE)アプリケーションでjOOQを使用する際に、最初のクエリが実行されるまでjOOQが初期化されていない(ascii-artロゴが表示されていない) 。これは問題ではありませんが、私たちのユースケースではそうです。そこで私たちは、アプリケーションの起動時にjOOQを初期化する方法を探しています。SpringBootでjOOQを初期化する

私たちが行ったことは、アプリケーションコンテキストが作成された後にSpringによって自動的に実行され、jOOQを初期化するためのクエリを実行するだけのBeanを作成することです。

@Bean 
CommandLineRunner runner(DSLContext create) { 
    new CommandLineRunner() { 
     @Override 
     void run(String... args) throws Exception { 
      create.fetchCount(create.select(BLACKBOX)) 
     } 
    } 
} 

これを行うより良い方法はありますか?だから、

+0

jOOQの後期初期化によって引き起こされる問題は何ですか? Btw:あなたの考えはうまくいきました。答えとして設定することができます... –

+0

_problem_は、AOPがいくつかのSpringサービスの実行をインターセプトし、その実行を監査証跡として記録するためです。ログを記録するモジュールは、RabbitMQを使用してリクエストを受信し、1秒のタイムアウトを持ちます。問題はjOOQの初期化がそれより少し時間がかかり、リクエストが失敗し、Rabbitによって拒否されることです。さて、回避策でそれはうまく動作します:) –

+0

ああ、私は参照してください。はい、大きなスキーマを持っている場合、生成されたすべてのクラスのクラス読み込みに時間がかかることがあります。これを解決するには実際のクエリを実行するのが最善の方法です。より安いクエリを実行することもできます: 'create.fetchExists(BLACKBOX)' –

答えて

1

、ルーカスはそれが答えだ、言ったように:

@Bean 
CommandLineRunner runner(DSLContext create) { 
    new CommandLineRunner() { 
     @Override 
     void run(String... args) throws Exception { 
      create.selectOne().fetch() 
     } 
    } 
} 
関連する問題