Spring Bootの@ConfigurationPropertiesアノテーションの使い方
@ConfigurationPropertiesでapplication.ymlに記述した値を読み込みます。
application.yml
system: user: takahashi pass: takahashi20190101
このようなapplication.ymlがあるとして、このファイルに対応するコンポーネントクラスを用意します。SampleComponentクラスとします。
package jp.co.confrage; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import lombok.Data; @Component @ConfigurationProperties(prefix = "system") @Data public class SampleComponent { private String user; private String pass; }
@Dataを@Valueにすると、String型のプロパティの場合はエラーになります。
private final Map<String, String> user;
というようにMap型にする場合、@Valueアノテーション(lombok.Value)でSetterを削除することが可能です。
メインのクラスでSampleComponentをDIしています。
package jp.co.confrage; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import lombok.AllArgsConstructor; @SpringBootApplication @AllArgsConstructor public class ConfigurationPropertiesApplication implements CommandLineRunner{ private final SampleComponent prop; public static void main(String[] args) { SpringApplication.run(ConfigurationPropertiesApplication.class, args); } @Override public void run(String... args) throws Exception { System.out.println(prop.getUser()); System.out.println(prop.getPass()); } }
application.propertiesに定義した値が出力されます。
takahashi takahashi20190101
@Value(org.springframework.beans.factory.annotation.Value)で値を設定する
@Valueアノテーションで設定ファイル(application.yml)の値を直接設定することが出来ます。
メンバ変数に対して@Valueアノテーションを付加します。
@Value("${spring.data.str}") private String str;
${spring.data.str}というプレースホルダを指定することで、application.ymlの設定値を直接設定することが可能になります。
spring: data: str: hogehoge #この値が直接取得できる
@Valueを使って直接取得することができるのですが、コントローラやサービスクラスで@Valueアノテーションを使うより、@Component、@ConfigurationPropertiesアノテーションを使用して、POJOクラスを作成してymlファイルの値を取得して、そのクラスをBean登録したほうが良いです。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント