はじめに
下記の記事からの補足になる
【IntelliJ + Docker (APP+DB) + SpringBoot (Maven) 環境構築】
https://qiita.com/SSM3G/items/bd61970648d94ccb691a
docker-compose.ymlに環境変数を記載
environmentでDockerコンテナを起動する際に渡す環境変数を記述できる
version: '3'
services:
app:
image: openjdk:14-jdk-alpine
ports:
- "80:8080"
volumes:
- .:/app
working_dir: /app
command: ./mvnw spring-boot:run
environment:
DATASOURCE: jdbc:mysql://db:3306/sample
db:
# 省略
application.propertiesに環境変数を記載
下記部分
spring.datasource.url=${DATASOURCE:jdbc:mysql://localhost:3306/sample}
spring.datasource.url=${DATASOURCE:jdbc:mysql://localhost:3306/sample}
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
${環境変数:デフォルト値}
と記載
環境変数が設定されている場合は環境変数を読み込む
設定されていない場合はデフォルト値を読み込む
SpringBoot起動
ローカル起動
環境変数は何も設定していないため
デフォルト値のjdbc:mysql://localhost:3306/sample
を読み込む
Docker起動
docker-compose.ymlでDATASOURCEという名で環境変数を設定しているため
appのコンテナ内ではこの環境変数が適応される
1.コンテナ内でSpringBootを起動
2.コンテナ内のapplication.propertiesを読み込む
3.環境変数のjdbc:mysql://db:3306/sample
を読み込む
set
で環境変数を確認したところ、ちゃんと設定されていました
おわり
${環境変数:デフォルト値}
の書き方が全然わからなくてハゲそうだった
SprinBoot application.properties 環境変数 切り替え 変数 リテラル ${} シェル変数 とかで色々調べちまった