Spring Boot お勉強 その4 ~自前の設定値の定義~

前回、application.propertiesにSpring Bootの設定値を書く方法をご紹介しました。
となると次に気になるのは、自分のアプリケーション内で設定値を定義したい場合はどうすればいいのか、という点ですね。
例えば、連携先外部システムの接続先など。


まずは、設定値を格納するクラスを作成します。

@Component
@ConfigurationProperties(prefix = "myapp", ignoreUnknownFields = true)
public class MyappProperties {
	
	private final OtherSystem otherSystem = new OtherSystem();
	
	public Push getOtherSystem() {
		return otherSystem;
	}

	public static class OtherSystem {

		private String host = "localhost";
		private String token = "qwety";
		
		// getter,setterは省略
	}
}

こんな感じです。
外部システム接続用のホスト名とトークンを保持するクラスです。
ちなみに"localhost"、"qwerty"の部分は設定のデフォルト値となります。
application.propertiesに該当の設定値が規定されないとこれが有効になります。


次にapplication.propertiesに次のように記載します。

myapp.otherSystem.host=foo.co.jp
myapp.otherSystem.host=bar



設定のキーの先頭、myappの部分は、@ConfigurationPropertiesのprefixでマッチングされます。
それ以下の部分は、該当クラスのインスタンス変数を辿るように値がセットされます。
(まあ、見れば何となくお分かりかと思いますが…)


値の利用は次のように行います。

public class OtherSystemCallService{
	
	@Autowired
	private MyappProperties properties;
	
	public void method() {
		
		connect(properties.getOtherSystem().getHost(), properties.getOtherSystem().getToken())
	}
}

設定値格納クラスに@Componentをつけているので、@Autowiredにより他のBeanにインジェクションされます。


ぜひ使ってみてください。
ではまた。

追記

値1個だけ取得する場合には以下のような書き方でbeanにinjectすることもできます。

@Value("${myapp.otherSystem.host}")
private String otherSystemHost;