Spring?Boot讀取配置文件內(nèi)容的3種方式(@Value、Environment和@ConfigurationProperties)
前言
Spring Boot中在yaml中編寫的自定義變量、數(shù)組、對象等,在代碼中讀取該yaml配置文件中內(nèi)容的三種方式。實現(xiàn)在代碼中運用配置文件(yaml)中自定義的值。yaml的基本語法格式我不知道該怎么總結(jié),很簡單,學(xué)完我的唯一感受就是記得冒號后面加空格、加空格、加空格。。。所以這里直接將讀取配置文件內(nèi)容的三種方式。不清楚yaml語法格式的可以先去了解一下。
在開始獲取前,首先在resources下配置aplication.yaml文件,在yaml文件內(nèi)編寫自定義的變量、數(shù)組、對象。已用來展示獲取的內(nèi)容值。代碼如下:
name: 心態(tài)還需努力呀 #對象 person: name: lisi age: 20 #數(shù)組 address: - shanghai - beijing
一、@Value
在Controller類下給屬性分別以@Value注解的方式分別賦值,@Value里的${yaml變量名}。
獲取對象就對象.變量名。
獲取數(shù)組就是使用索引的方式數(shù)組[0],在這里表示數(shù)組中的第一個值(上海)。
具體代碼如下:
package com.imust.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Value("${name}")
private String name;
// 獲取對象
@Value("${person.name}")
private String person_name;
@Value("${person.age}")
private int person_age;
// 獲取數(shù)組
@Value("${address[0]}")
private String address1;
@Value("${address[1]}")
private String address2;
@RequestMapping("/hello")
public String hello(){
System.out.println(name);
System.out.println(person_name);
System.out.println(person_age);
System.out.println(address1);
System.out.println(address2);
System.out.println("========================");
return "Hello,Spring Boot!";
}
}運行http://localhost:8080/hello??刂婆_打印效果圖如下:

二、Environment
2.1 注入對象
注入對象需要用到Autowired注解
@Autowired
private Environment env;2.2 調(diào)用獲取屬性的方法
方法內(nèi)傳入?yún)?shù)與上面@Value里的參數(shù)一樣,都是與yaml文件配置里面自定義的一致。
System.out.println(env.getProperty("name"));
System.out.println(env.getProperty("person.name"));
System.out.println(env.getProperty("person.age"));
System.out.println(env.getProperty("address[0]"));運行后http://localhost:8080/hello??刂婆_打印效果圖如下:

2.3 上述兩種方法對比
首先第一種@Value方法便于理解,用起來也很簡單,就是屬性多了后會出現(xiàn)大量的@Value給屬性賦值,代碼不夠精簡。
第二種就解決了這一麻煩,只需要注入Environment對象后,直接使用getProperty方法里寫入要讀入的值的key就可獲取到。代碼會很精簡。
三、@ConfigurationProperties
3.1 創(chuàng)建一個實體類
這里以獲取配置文件中的person對象值為例。所以名字叫Person。在上方添加@ConfigurationProperties注解。
代碼如下:
package com.imust.pojo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}3.2 解決警告問題
當(dāng)加上@ConfigurationProperties注解后會出現(xiàn)下圖所示的內(nèi)容:

點擊上圖箭頭所指的地方,進入網(wǎng)頁后將依賴賦值放到自己的pom.xml文件的放依賴的地方。

導(dǎo)入依賴下載完成后上述的警告就會消失。
3.3 修改@ConfigurationProperties
因為我們有2個name的值,如果不加參數(shù)獲取默認(rèn)是取高層級下的值,age就不會被取出來。
所以我們要加上perfix=“person”,用來指定該類下的屬性是指的person對象下的值。
@ConfigurationProperties(prefix = "person")
3.4 編寫測試代碼
在Controller注入Person
@Autowired
private Person person;打印person查看效果
System.out.println(person.toString());
查看控制臺輸出的結(jié)果,可看到讀取配置文件內(nèi)容成功。

總結(jié)
讀取配置文件的內(nèi)容的三種方法就已經(jīng)演示完成,在大多數(shù)屬性少的情況下還是用@Value的方法最為簡便。精簡的話還是第二種注入對象的方式使代碼看起來更加美觀。理解起來不太容易。第三種是在特殊的情況下比較常用的讀取配置文件的內(nèi)容可以封裝為對象。第一種是必須會的,二三種可以簡單理解,用到時可以參考資料也會很快的想起來并且快速的運用。
到此這篇關(guān)于Spring Boot讀取配置文件內(nèi)容的3種方式的文章就介紹到這了,更多相關(guān)Spring Boot讀取配置文件內(nèi)容內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mybatis的insert語句插入數(shù)據(jù)時的返回值的實現(xiàn)
這篇文章主要介紹了mybatis的insert語句插入數(shù)據(jù)時的返回值的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
Nacos服務(wù)發(fā)現(xiàn)并發(fā)啟動scheduleUpdate定時任務(wù)的流程分析
這篇文章主要介紹了Nacos服務(wù)發(fā)現(xiàn)并發(fā)啟動scheduleUpdate定時任務(wù),本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02
Java開發(fā)環(huán)境配置JDK超詳細(xì)整理(適合新手入門)
這篇文章主要給大家介紹了關(guān)于Java開發(fā)環(huán)境配置JDK超詳細(xì)整理的相關(guān)資料,非常適合新手入門,JDK是Java語言的軟件開發(fā)工具包,主要用于移動設(shè)備、嵌入式設(shè)備上的java應(yīng)用程序,需要的朋友可以參考下2023-11-11
SpringMVC實現(xiàn)Controller的三種方式總結(jié)
這篇文章主要介紹了SpringMVC實現(xiàn)Controller的三種方式總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02

