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(ES20xx),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^


コメント