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