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;