0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

docker-composeでSpringBoot + MySQLを動かした際にSpringBootが起動しなかったのでメモ

Posted at

原因

MySQLの起動完了前に、SpringBootが初期接続を試みて失敗していた

環境

  • SpringBoot : 2.1.7.RELEASE
  • MySQL : 8.0.17
  • Docker : 19.03.2
  • docker-compose : 1.24.1
  • compose-file : 3.7

対応

application.ymlにDB初期接続時のTimeOutの設定を追加

application.yml
spring:
  datasource:
    hikari:
      initializationFailTimeout: 0

上記はコネクションプールライブラリにHikariCPを使用している場合の設定
hikari以降のkeyは使用しているライブラリによって異なる
※コネクションプールの設定は以下の記事を参考にさせて頂きました
Spring Boot DBコネクションプール

initializationFailTimeoutを0に設定するとどうなるか

HikariCPのREADMEによると

If the value is zero (0), HikariCP will attempt to obtain and validate a connection. If a connection is obtained, but fails validation, an exception will be thrown and the pool not started. However, if a connection cannot be obtained, the pool will start, but later efforts to obtain a connection may fail.

値に0を設定した場合、接続を試み、検証を行う。コネクションを獲得したが、検証に失敗した場合、例外を投げ、プールは開始しない。しかしながら、コネクションを獲得できない場合でもプールは開始される。ただし、後からコネクションを獲得しようとしても失敗する可能性がある。

とのこと。

ちなみに

はじめはdocker-compose.ymldepends_onを書いておけば、mysqlが利用可能になってからアプリケーションがスタートするものと思っていたが、Docker-docsによるとそうではなく、データベースが起動していない場合の対処はアプリ側で再接続処理を入れるなどして責任を持つべきとのこと

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?