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

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

Spring Boot で、アノテーションベースの設定を書いていると、これら設定を外部化できないかと思うことが度々ある。これまでの xml ベースの設定であれば、必要な設定ファイルだけアプリケーション起動時にクラスパスに追加すれば外部化できていた。

Spring Boot で、アノテーションベースの設定に対し、このようなアプリケーション内部の設定を起動時に上書きするには、以前の記事でも触れたように application.properties や、アプリケーション起動時のコマンドライン引数を使用する。

これを可能にするためには、Spring Boot がデフォルトで持っている設定可能なプロパティを拡張し、独自のアプリケーション設定を application.properties で設定できるようにしてやる必要がある。

具体的には @ConfigurationProperties を使用して、以下のように実装する。アノテーションの引数に prefix を指定すると、プロパティのグルーピングができる。

@SpringBootApplication
public class Application {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public MongoConfiguration mongoConfiguration() {
        return new MongoConfiguration();
    }

    @ConfigurationProperties(prefix = "app.mongo")
    public static class MongoConfiguration {
        private String uri = "mongodb://localhost:27017/";
        private String database = "db";
        private String username = "user";
        private String password = "password";

        // getter/setter
    }
}

これに対して application.properties で設定する場合、以下のようになる。

app.mongo.url=mongodb://192.168.0.11:27017/
app.mongo.database=userapp
app.mongo.username=admin
app.mongo.password=pwd1234