🌍
【1分でわかる】SpringBootで環境毎に設定を変更する方法
冒頭
- 開発環境
- 本番環境
など、そのプロダクトを環境ごとに設定を変更させたい時にその方法に戸惑うことがあると思います。
そこで今回は - 設定方法
-
設定が反映されているか確認する方法
をざっと簡潔に整理してみたいと思います。
設定方法
-
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