本文へスキップ
BecomeCoder

Spring / Spring Bootコース · 第3章 Spring Boot ― すぐに動くアプリを作る · レッスン11

application.properties/yml で設定を変える

ローカル実施

導入

自動構成の「賢い初期値」はありがたいですが、ポート番号を変えたい、DBの接続先を変えたい、といった調整は当然必要になります。これをJavaのコードに直接書き込むのは避けたいところです。

説明

Spring Bootは、src/main/resources/application.properties(または application.yml)というファイルの内容を読み込み、自動構成の初期値を上書きできるようにしています。

# application.properties
server.port=8081

spring.datasource.url=jdbc:postgresql://localhost:5432/shopdb
spring.datasource.username=shop_user
spring.datasource.password=secret

spring.jpa.hibernate.ddl-auto=update

同じ内容をYAML形式で書くこともできます(階層をインデントで表現でき、見通しが良くなります)。

# application.yml
server:
  port: 8081

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/shopdb
    username: shop_user
    password: secret
  jpa:
    hibernate:
      ddl-auto: update

環境(開発・本番)ごとに設定を切り替えたい場合は、プロファイル(profile) という仕組みを使います。application-dev.ymlapplication-prod.yml のようにファイルを分け、起動時にどのプロファイルを使うか指定します。

graph LR
  Base["application.yml<br/>(共通設定)"] --> Merge["起動時にマージ"]
  Dev["application-dev.yml<br/>(開発用の上書き)"] --> Merge
  Merge --> Run["実際に使われる設定"]

コード側で、この設定値をBeanのフィールドに取り込みたいときは @Value を使います。

@Component
class MailSettings {

    @Value("${spring.mail.from}")
    private String fromAddress; // application.yml の spring.mail.from の値が入る
}

「動作を変えるための値」をJavaのソースコードから切り離し、設定ファイル(や環境変数)に追い出しておく——これにより、コードを1行も変えずに、環境ごとに違う挙動をさせられるようになります。

やってみよう

自分のPCの開発環境と、実際にサービスを提供する本番環境とで、値が変わりそうな設定を3つ挙げてみましょう(ヒント: ポート番号、DBの接続先、ログの詳しさなど)。それぞれ application-dev.ymlapplication-prod.yml のどちらに書くべきか考えてみてください。