技術ネタはQiitaに移りました。壁もどこぞに。

Spring Boot で設定可能なプロパティを追加する 2

過去記事に関連して、より柔軟なプロパティの割り当て方に至ったため、改めてまとめておく。 yo1000.hateblo.jp

@ConfigurationProperties アノテーションを付けたクラスが、application.properties に設定の外部化をできるようになる、というのは以前紹介したとおり。だが、このアノテーション、クラスのみに適用可能というわけではないようだったので、いろいろ調べてみたところ、@Bean アノテーションと併用することで、Bean メソッドにも適用可能であることがわかった。

即ち以下のようになる。

@Bean
@ConfigurationProperties(prefix = "userconf.jdbc")
public JdbcConfiguration jdbcConfiguration() {
    return new JdbcConfiguration();
}

@SpringBootApplication
public static class JdbcConfiguration {
    private String driverClassName;
    private String connectionString;
    private String username;
    private String password;
    private String schema;

    // getter/setter
}

クラス側に直接 @ConfigurationProperties アノテーションを適用しない場合、設定可能となるプロパティとアノテーションの間で、少しばかり行が空いてしまうことになり、このあたりの見通しは若干犠牲になるかもしれない。ただ、Bean メソッドにこのアノテーションを適用することにはそれ以上の意味がある。

どのような場面で使用するかといえば、上記のような JDBC 接続設定クラスを作成したはいいが、接続先のデータソースが複数ある、といった場合にこれを活かすことができる。クラス側に @ConfigurationProperties を適用してしまうと、同様のフィールド一式を持ったクラスを複数作成しなければならないことになり、コードの重複が発生してしまうため、Bean メソッド側にアノテーションを適用して設定クラスの重複を回避する。