Spring Bootでは、application.properties(yml)にアプリケーションの設定値を持たせることができるわけだが、その値はSpring Bootがデフォルトで持っているものしか設定できない。以下が設定可能な一覧と各デフォルト値。
Common application properties
上記以外で、独自の設定値を持たせたい場合は以下のように設定する。
※ここでの例は、
slack.api.token
slack.api.domain
という2つのプロパティを独自で定義したい設定値として示す。
1. プロパティに対応するJava Beanクラスを作成する
以下のように、application.propertiesに設定したいプロパティを持つJava Beanクラスを作成する。
@Component
@ConfigurationProperties(prefix = "slack.api")
public class SlackApiConfiguration {
private String token;
private String domain;
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
}
- @Componentをつけてコンテナに登録されるようにしておく。
- @ConfigurationPropertiesをつけてこのクラスが独自で設定したいプロパティを持つクラスという宣言をする。また、引数にprefixを指定するとその値でプロパティがグルーピングできる。
- 設定したいプロパティを定義する(ここではtokenとdomain)。なお、これらにはsetterとgetterが必要。
2. メタ情報の追加
これは必須ではないが、pom.xmlに以下のようにspring-boot-configuration-processorを追加することで、メタ情報が追加されapplication.propertiesでCtrl + Spaceを押すと候補が表示されるようになる。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
こんな感じで独自に追加した設定項目が候補表示される。
3. application.properties(yml)に独自の設定値を定義する
slack.api.token=XXXXXXXX
slack.api.domain=https://slack.com/api/
ここで設定した値が、1で作ったJava Beanクラスの各プロパティにバインドされる。
4. あとは必要なところで使うだけ
// 1で作ったJava BeanクラスをDIして
@Autowired
SlackApiConfiguration slackApiConfiguration;
// getterで呼ぶだけ
System.out.println(slackApiConfiguration.getToken());
System.out.println(slackApiConfiguration.getDomain());
参考
https://blog.ik.am/entries/376
http://m12i.hatenablog.com/entry/2014/10/28/101919