エキサイト株式会社エンジニアの佐々木です。アプリケーションを開発していると設定が増えてくると思いますが、増えてくるとファイルが増えて大変です。また、モジュラーモノリスのような構成にすると設定を別々に管理した方が都合がいいことがでてきます。SpringBootで試してみます。
前提
SpringBoot2.4以上で使用ができます。
設定ファイルで指定する方法
下記のような database.yaml
のファイルがあるとします。
database: host: localhost port: 33067 schema: hogehogea
application.yamlファイル
ではないので、SpringBoot標準では読み込みません。application.yaml
に次の設定を追記します。
spring: config: import: classpath:/database.yaml
上記の設定で設定を分けられます。
クラスに書く方法
設定ファイル
デフォルトのままapplication.yamlをそのまま読み込めなかったと思うので、property(.ini)ファイルにします。(factoryクラスを書けば読み込み可能です)
database.host = localhost database.port = 3306 database.schema = hogehoge
クラスファイル
クラスファイルは下記のようになります。
@Data @Configuration @ConfigurationProperties(prefix = "database") @PropertySource("classpath:database.properties") public static class DatabaseConfig { private String host; private Integer port; private String schema; @Bean public DatabaseConfig databaseConfig(){ return new DatabaseConfig(); } }
@PropertySource
にファイル名を書くと読み込んでくれます。アノテーションがたくさんついていますが、下記にまとめます。
@Data : lombokというライブラリを使って、Getter/Setterのメソッド等を自動的に生成してくれます @Configuration: 設定ファイルクラスであることを明示します @ConfigurationProperties: prefixで指定した文字列の配下とクラスのフィールド名が一致しているものにマッピングします @PropertySource: 設定ファイルの置き場所を指定します @Bean: DIコンテナに登録します
記述量は多くなりますね。ちなみに、@PropertySource
がデフォルトでYAMLに対応するというのは、GithubのIssueで拒否されています。(spring.config.importがでてきたから?)
まとめ
SpringBoot2.4以降は、spring.config.import
を使うのが良さそうです。ニッチなネタですが、意外とソースが古かったりニーズにはずれていたりします。参考になれば幸いです。
最後に
エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しております。長期インターンも歓迎していますので、興味があれば連絡いただければと思います。
カジュアル面談はこちらになります! meety.net
募集職種一覧はこちらになります!(カジュアルからもOK) www.wantedly.com