JpaRepository起動時のJavaアプリ制御
JpaRepositoryを利用してrepository層を実装したJavaアプリについて、docker-composeにJava, DBの設定を単純に記載しただけだと起動がうまくいきませんでした。Java側からDBに接続しに行くのにDBの起動が間に合わず、接続に失敗して落ちることが原因だったため、下記のように順序制御を入れる必要があります:
services:
db:
container_name: db
image: mariadb:11.4.2
ports:
- 3306:3306
volumes:
- ./volumes/db/initdb.d:/docker-entrypoint-initdb.d
environment:
- MYSQL_ROOT_PASSWORD=password
healthcheck:
test: mariadb -u root -ppassword
start_period: 5s
interval: 5s
timeout: 5s
retries: 50
app:
container_name: app
image: app
ports:
- 8080:8080
depends_on:
db:
condition: service_healthy
- db側ではヘルスチェックの設定を入れ、
testで指定したコマンドが成功することを定期的に確認します。 - app側ではdb側に依存することを宣言しています。