🌍

【1分でわかる】SpringBootで環境毎に設定を変更する方法

2024/09/12に公開

冒頭

  • 開発環境
  • 本番環境
    など、そのプロダクトを環境ごとに設定を変更させたい時にその方法に戸惑うことがあると思います。
    そこで今回は
  • 設定方法
  • 設定が反映されているか確認する方法
    をざっと簡潔に整理してみたいと思います。

設定方法

  • src/main/java/resources/application.properties以外にも下記のように設定ファイルを増やす

    application-*.propertiesの形でファイルを複製することでSpringBootが認識してくれる点には注意が必要

  • src/main/java/resources/application.properties内に下記記述を記載

spring.profiles.active=dev

devの部分は先ほど作成したapplication-*.properties*をprefixとするため、
他にもapplication-prod.propertiesなどを作成していれば、

spring.profiles.active=prod

なども可能

設定が反映されているか確認する方法

  • application.properties
spring.profiles.active=dev
example.url=http://example.com.1
example.username=username1
example.key=key1
  • application-dev.properties
example.url=http://example.com.2
example.username=username2
example.key=key2

Controllerを作成して上記の設定が反映されるかを簡易的に検証してみる

  • ExampleConfigurationController.java
package com.in28minutes.springboot.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ExampleConfigurationController {

  @Autowired
  private ExampleServiceConfiguration configuration;

  @RequestMapping("/example")
  public ExampleServiceConfiguration retrieveAllCourses() {
    return configuration;
  }

}

  • ExampleServiceConfiguration.java
package com.in28minutes.springboot.example;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@ConfigurationProperties(prefix = "example")
@Component
public class ExampleServiceConfiguration {
  private String url;
  private String username;
  private String key;

  public void setUrl(String url) {
    this.url = url;
  }

  public void setUsername(String username) {
    this.username = username;
  }

  public void setKey(String key) {
    this.key = key;
  }

  public String getUrl() {
    return url;
  }

  public String getUsername() {
    return username;
  }

  public String getKey() {
    return key;
  }
}

※上記はわかりやすくするため、あえてゲッターとセッターを明示していますが、lombokを使ってDTOを簡単に作成するのが一般的だと思います。

結果確認

アプリケーションを実行して、localhost:8080/exampleをブラウザまたはpostmanなどで確認してみると、

{
"url": "http://example.com.2",
"username": "username2",
"key": "key2"
}

が確認できると思います。
本来application.propertiesの設定が読み込まれるはずが、application-dev.propertiesの設定が読み込まれています

最後に

上記を応用することで、例えば、開発環境と本番環境で扱うデータベースが違うなどのシーンでもフレキシブルに対応が可能だと思います。たまに振り返る用で読んでいただければ光栄です。
いいね、フォロー、よろしくお願いいたします。

Discussion