註解ConfigurationProperties注入yml配置文件中的數據

在使用SpringBoot開發中須要將一些配置參數放在yml文件中定義,再經過Java類來引入這些配置參數java

SpringBoot提供了一些註解來實現這個功能git

  • ConfigurationProperties
  • Value
  • EnableConfigurationProperties

下面提供例子來講明如何引入常規變量,數組,List,Map,引用對象。github

[相關代碼-GitHub]spring

 

引入pom

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
</dependency>

<!--lombok 插件,非必須 -->
<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <optional>true</optional>
</dependency>

 

 

註解類

這裏定義了一個全局的註解類,數組

@Data
@ToString
@ConfigurationProperties(prefix = "all")
public class AllConfigurationProperties {

//普通變量
private String name;
   //引用對象
private OtherProperties other = new OtherProperties(); //數組 private String[] server; //list private List list; //map private Map map; //複雜map private Map<String, ModuleConfig> modules = new LinkedHashMap(); //複雜list private List<ModuleConfig> modulesList; }

 

ConfigurationProperties:標明者是一個配置類,須要prefix配置yml中的配置前綴。

須要注意幾點
1. 配置類中的名稱應當符合JavaBean的命名方式
2. 配置類中的名稱應當與yml中的相同,不然應使用@Value指定
好比:
yml文件:

all:
  name: libai
------------------------------------
@Value(
"${all.name}") private String myName;

 

3. 若是已經使用@Value方式,可不用寫Setter方法。不然必須爲該變量寫Setter方法,這裏使用lombok的註解@Data來配置,會自動生成Setter,Getter,ToString方法

4. 默認值設置:
  (1)當使用@Value時,能夠經過以下方式實現

  @Value("${nzrpc.netty.port:8321}")
       private int nport;
     當yml沒有配置nzrpc.netty.port 時,默認值即是8321
  (2) 或者是直接對變量賦值
    private int nport = 8321 ;
    private  OtherProperties other = new OtherProperties();
 


上述配置類的引用對象
@Data
public class ModuleConfig {
    private static final long serialVersionUID = 5508512956753757169L;
    private String name;
    private String version;
    private String owner;
}

@Data
public class OtherProperties {

    private  Long id;
    private String version;
}

 

使能配置類

@Slf4j
@EnableConfigurationProperties(AllConfigurationProperties.class)
@Configuration
public class AutoConfiguration {

    @Autowired
    AllConfigurationProperties properties;

    @PostConstruct
    public void  init(){

        System.out.println("properties = " + properties);

    }

}

 

這裏使用@EnableConfigurationProperties使能配置類。它會爲AllConfigurationProperties注入yml中的配置參數,並建立一個bean,後續可以使用@Autowired注入使用spring-boot

@Configuration註明這是一個SpringBoot的配置類spa

使用方法init()輸出配置..net

 

yml中配置

all:
  name: libai
  other:
    id: 100
    version: 1.0.1

  server:
    - 127.0.0.1
    - 127.0.0.2
    - 127.0.0.3

  list:
    - 111
    - 222
    - 333

  map:
    key1: value1
    key2: value2
    key3: value3

  modules:
    key1:
      name: modules-name-1
      version: modules-version-1
      owner: modules-owner-1
    key2:
      name: modules-name-2
      version: modules-version-2
      owner: modules-owner-2

  modulesList:
    - name: modules-name-3
      version: modules-version-3
      owner: modules-owner-3
    - name: modules-name-4
      version: modules-version-4
      owner: modules-owner-4

 

 

輸出

properties = AllConfigurationProperties( name=libai,  other=OtherProperties(id=100, version=1.0.1), server=[127.0.0.1, 127.0.0.2, 127.0.0.3],  list=[111, 222, 333], map={   key1=value1,    key2=value2,    key3=value3   },  modules={   key1=ModuleConfig(name=modules-name-1, version=modules-version-1, owner=modules-owner-1),   key2=ModuleConfig(name=modules-name-2, version=modules-version-2, owner=modules-owner-2)   },  modulesList=[   ModuleConfig(name=modules-name-3, version=modules-version-3, owner=modules-owner-3),    ModuleConfig(name=modules-name-4, version=modules-version-4, owner=modules-owner-4)   ])
相關文章
相關標籤/搜索