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のリラックスドバインディングルール:

  1. ドットはアンダースコアに変換。 spring.datasource.url -> SPRING_DATASOURCE_URL
  2. ハイフンはアンダースコアに変換。 maximum-pool-size -> MAXIMUM_POOL_SIZE
  3. すべて大文字に変換。 spring -> SPRING
  4. ネストされたキーはアンダースコアで結合。 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変数に変換する場合。

試してみる — YAML ↔ ENV Converter

フルツールを開く