Spring Boot application.ymlからENVへの変換
Spring Bootのapplication.yml設定をSpringのリラックスドバインディングルールを使用して環境変数に変換します。ドット記法と大文字変換の規則を学びます。
Real-World Configs
詳細な説明
Spring BootはYAML設定と環境変数の間に独自の関係があります。その「リラックスドバインディング」機能により、環境変数は特定の命名規則に従ってYAMLプロパティをオーバーライドできます。
Spring Boot application.yml:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/mydb
username: dbuser
password: dbpass
hikari:
maximum-pool-size: 10
minimum-idle: 5
connection-timeout: 30000
jpa:
hibernate:
ddl-auto: validate
show-sql: false
redis:
host: localhost
port: 6379
server:
port: 8080
servlet:
context-path: /api
logging:
level:
root: INFO
com.example.myapp: DEBUG
org.hibernate.SQL: DEBUG
対応する環境変数:
SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/mydb
SPRING_DATASOURCE_USERNAME=dbuser
SPRING_DATASOURCE_PASSWORD=dbpass
SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE=10
SPRING_DATASOURCE_HIKARI_MINIMUM_IDLE=5
SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT=30000
SPRING_JPA_HIBERNATE_DDL_AUTO=validate
SPRING_JPA_SHOW_SQL=false
SPRING_REDIS_HOST=localhost
SPRING_REDIS_PORT=6379
SERVER_PORT=8080
SERVER_SERVLET_CONTEXT_PATH=/api
LOGGING_LEVEL_ROOT=INFO
LOGGING_LEVEL_COM_EXAMPLE_MYAPP=DEBUG
LOGGING_LEVEL_ORG_HIBERNATE_SQL=DEBUG
Spring Bootのリラックスドバインディングルール:
- ドットはアンダースコアに変換。
spring.datasource.url->SPRING_DATASOURCE_URL - ハイフンはアンダースコアに変換。
maximum-pool-size->MAXIMUM_POOL_SIZE - すべて大文字に変換。
spring->SPRING - ネストされたキーはアンダースコアで結合。 YAMLの各ネストレベルがアンダースコア区切りを追加します。
リストの特別な処理:
spring:
profiles:
active:
- dev
- debug
SPRING_PROFILES_ACTIVE=dev,debug
# またはインデックス記法で:
SPRING_PROFILES_ACTIVE_0=dev
SPRING_PROFILES_ACTIVE_1=debug
ドット付きマップキー(ロギングレベル):
logging.levelセクションはパッケージ名をレベルにマッピングします。パッケージ名のドット(com.example.myapp)はアンダースコアに変換されるため、曖昧さが生じる可能性があります。Springはフルプロパティパスをチェックすることでこれを解決します。
よくある注意点:
ddl-auto(ハイフン付き)とddlAuto(camelCase)はどちらもENVではDDL_AUTOにマッピングされる- YAMLのブール値(
show-sql: false)はENVでは文字列になる(SHOW_SQL=false) - スラッシュ付きのコンテキストパス(
/api)はフォーマット間で異なるクォートにすべきではない
Spring Bootのリラックスドバインディングにより、YAML-to-ENV変換は信頼性がありますが、逆方向(ENV-to-YAML)では適切なネストを再構築するために元のYAML構造の知識が必要です。
ユースケース
Spring Bootアプリケーションをクラウドプラットフォーム(AWS ECS、GCP Cloud Run)にデプロイする際、設定が環境変数で注入されるため、ローカルのapplication.ymlをコンテナランタイム用のENV変数に変換する場合。