親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。

Spring Bootの起動が遅いので試行錯誤した話

コンパイル言語の宿命

Spring Bootに限らずJava等コンパイル言語の宿命ですが、ちょっとした変更でもいちいちコンパイルが必要になりますよね。
そうして開発効率の悪さを感じてしまいます。
※もちろんコンパイル言語は実行時のパフォーマンスに安定感があるものが多いのでメリットもたくさんあります。

そんな中でもSpring Bootではhibernateのあたりで時間がかかることがよくあります。

Initialized JPA EntityManagerFactory for persistence unit ‘default’

Spring Bootの起動で時間がかかるのは以下の処理の時ではありませんか?

Initialized JPA EntityManagerFactory for persistence unit ‘default

色々調べた結果、application.ymlのhibernateの設定で以下のようにtempやdirectを入れれば改善されたとの記事を読んだのですが、、、

jpa:
  properties:
    hibernate:
      temp:
        use_jdbc_metadata_defaults: false
      dialect: org.hibernate.dialect.MySQLDialect

MySQLの接続に関わるJDBCの設定に関する変更になるのですが、
正直自分の環境では変化がありませんでした。

ただ元々ここの処理にかかってた時間が9秒前後だったので、
サンプルとしては物足りなかったかもしれません。
もうすこし時間がかかるようになったら再度やってみようと思います。

ちなみに、以下の設定を入れただけではエラーが出てしまいます。

temp:
  use_jdbc_metadata_defaults: false

こんな感じのエラーが。

Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

同時に以下の記述も忘れずに入れましょう。

dialect: org.hibernate.dialect.MySQLDialect

他の試行錯誤

ちなみに僕の環境の場合はIDEから実行させず、ターミナルから直接コマンド打って実行させた方が起動が早かったりするので(数秒ですが)、そういった工夫で開発効率の悪化を防ぐように努めています。