簡體   English   中英

Spring 使用@ConfigurationProperties 和@Value 注入值

[英]Spring Inject Values with @ConfigurationProperties and @Value

如果 yaml 屬性文件中未定義屬性,如何從 yaml 注入值並設置默認值? 像下面這樣同時使用 ConfigurationProperties 和 Value 是否有用? 如果沒有,我們還能如何實現它?

屬性文件

app:
    prop1: test
    prop2: true
    map:
       key1: value1
       key2: value2

Java class:

@Data
@Validated
@ConfigurationProperties("app")
public class properties {
   private String prop1;

  @Value("${app.prop2:default}")
  private Boolean prop2;

  @NestedConfigurationProperty
  @NotNull
  private Map<String,String> prop3;
}

像下面這樣使用 ConfigurationProperties 和 Value 很好用

否。@ConfigurationProperties 向@ConfigurationProperties表明它應該根據名稱將 java 字段綁定到某些匹配屬性。 但是,要實現 spring 要求具有此注釋的 class 必須是 spring bean(代理類)。 因此,您必須將它與@Configuraiton@Component或其他一些注釋一起使用,為這個 class 創建一個 spring bean。

還有一些其他功能可用,您可以在其他一些 spring bean 上使用另一個注釋@EnableConfigurationProperties(properties.class) (不是當前具有@ConfigurationProperties注釋的 class )

最常見的是您使用@Configuration ,然后 spring 將能夠創建 spring bean(此類的代理),然后在您擁有的字段上綁定您期望的值。

由於您已經擁有@ConfigurationProperties("app") ,因此名稱為prop2的屬性將與應用程序屬性app.prop2

@Data
@Validated
@Configuration <---------------
@ConfigurationProperties("app")
public class properties {
   private String prop1;

   private Boolean prop2;

  @NestedConfigurationProperty
  @NotNull
  private Map<String,String> prop3;
}

如果您的問題是在 application.properties 中根本不存在屬性的情況下的默認值,那么您可以使用一些值初始化那些 java 字段。

@Data
@Validated
@Configuration <---------------
@ConfigurationProperties("app")
public class properties {
   private String prop1 = "default";

   private Boolean prop2 = false;

  @NestedConfigurationProperty
  @NotNull
  private Map<String,String> prop3;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM