SpringBoot讀寫操作yml配置文件方法
yml配置規(guī)則
屬性跟屬性值之間使用“:”和一個“空格”隔開,層級結構通過縮進對齊,縮進只能使用空格,不能用tab,并且大小寫敏感,使用#注釋文檔;
yml配置除了能像properties讀取為kv結構,還能方便的讀取成集合(List、Set等)、數(shù)組、對象、Map,還能進行嵌套結構讀??;
普通的kv讀取
普通kv結構可以直接使用@Value標簽讀取,@Value除了可以讀取普通kv,也能讀取List或Map結構里的某一項;另外使用Environment.getProperty()方法也能像properties那樣讀取kv結構,但也只能以kv結構讀??;
yml格式:
xxx: xxxx
xxx:
xxx: xxxx
xxx:
xxx: xxxx
xxx: xxxx
xxx: xxxx
可以直接使用@Value("${xxx}")、@Value("${xxx.xxx.xxx}")讀??;
讀取到集合和數(shù)組
使用@Value直接讀取好像只能使用xxx: xxxx,xxxx,xxxx逗號隔開的格式,可以讀取成List、Set或者數(shù)組,其他格式可以放到Bean里當作類的屬性讀取;
yml格式:
xxx:
- xxxx
- xxxx
- xxxx
xxx: [xxxx,xxxx,xxxx]
xxx: xxxx,xxxx,xxxx
讀取為對象和Map
對象和Map的格式是一樣的,只是讀取的目標不同;讀取為對象時需要提供setXXX方法,并且XXX要跟配置文件里命名一致;(另外測試時發(fā)現(xiàn)自動生成的set方法,對駝峰結構修改大小寫會造成無法識別到配置)
yml格式:
xxx:
x: xxxx
x: xxxx
x: xxxx
xxx: {x: xxxx, x: xxxx, x: xxxx}
另外各種格式可以組合嵌套使用,例如list里使用map或者map里包含list;
Demo:
yml配置文件application.yml:
#yml文件
a: hello
val:
b: 123
c: false
d: ENV
mybeantest:
name: Tom
age: 14
addr: 北京
bestfriend: ${myArrayA[3]}
mybeantest2: {name: Jerry, age: 13, id: 1001}
myArrayA:
- tom
- jerry
- jack
- alice
myArrayB: [a,b,c]
myListC: 3,4,5,6
myListD: [{name: Jerry, age: 11, addr: 上海},{name: Jack, age: 12, addr: 北京}]
myListE:
- {name: Bob, age: 22}
- {name: Lily, age: 21}
myListF:
- name: AAA
age: 11
- name: BBB
age: 22
myListG:
- - aaa
- bbb
- ccc
- - dd
- ee
- ff
maps:
mapA:
A: 1
B: 2
C: 3
D: 4
mapB:
a: AA
b: BB
c: CC
mapC: {X: x, Y: y, Z: z}
mapD:
L1:
- x
- y
- z
L2:
- X
- Y
- Z
mapE:
M1:
a: A
b: B
M2:
C: c
D: d
mapF:
m1: {name: TOM, age: 33}
m2: {name: JERRY, age: 44}
讀取為bean的類MyBean.java和MyBean2.java:
package testspringboot.test3;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "mybeantest")
public class MyBean {
public String name;
public int age;
public String address;
public String bestFriend;
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;
}
public String getAddress() {
return address;
}
public void setAddr(String address) {//setXXX方法,只需XXX跟配置文件里的名稱對應即可(自動生成的set方法駝峰結構修改大小寫會造成干擾)
this.address = address;
}
public String getBestFriend() {
return bestFriend;
}
public void setBestFriend(String bestFriend) {
this.bestFriend = bestFriend;
}
@Override
public String toString() {
return "MyBean [name=" + name + ", age=" + age + ", address=" + address + ", bestFriend=" + bestFriend + "]";
}
}package testspringboot.test3;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "mybeantest2")
public class MyBean2 {
public String name;
public int age;
public int id;
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;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "MyBean2 [name=" + name + ", age=" + age + ", id=" + id + "]";
}
}讀取為集合的類MyList.java:
package testspringboot.test3;
import java.util.List;
import java.util.Set;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "")
public class MyList {
public List<String> myArrayA;
public Set<String> myArrayB;
public Integer[] myListC;
public List<MyBean> myListD;
public List<MyBean> myListE;
public List<MyBean> myListF;
public List<List<String>> myListG;
public List<String> getMyArrayA() {
return myArrayA;
}
public void setMyArrayA(List<String> myArrayA) {
this.myArrayA = myArrayA;
}
public Set<String> getMyArrayB() {
return myArrayB;
}
public void setMyArrayB(Set<String> myArrayB) {
this.myArrayB = myArrayB;
}
public Integer[] getMyListC() {
return myListC;
}
public void setMyListC(Integer[] myListC) {
this.myListC = myListC;
}
public List<MyBean> getMyListD() {
return myListD;
}
public void setMyListD(List<MyBean> myListD) {
this.myListD = myListD;
}
public List<MyBean> getMyListE() {
return myListE;
}
public void setMyListE(List<MyBean> myListE) {
this.myListE = myListE;
}
public List<MyBean> getMyListF() {
return myListF;
}
public void setMyListF(List<MyBean> myListF) {
this.myListF = myListF;
}
public List<List<String>> getMyListG() {
return myListG;
}
public void setMyListG(List<List<String>> myListG) {
this.myListG = myListG;
}
@Override
public String toString() {
return "MyList [myArrayA=" + myArrayA + ",\n myArrayB=" + myArrayB + ",\n myListC=" + myListC + ",\n myListD="
+ myListD + ",\n myListE=" + myListE + ",\n myListF=" + myListF + ",\n myListG=" + myListG + "]";
}
}讀取為Map的類MyMap.java:
package testspringboot.test3;
import java.util.List;
import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "maps")
public class MyMap {
public Map<String, Integer> mapA;
public Map<String, String> mapB;
public Map<String, String> mapC;
public Map<String, List<String>> mapD;
public Map<String, Map<String, String>> mapE;
public Map<String, MyBean2> mapF;
public Map<String, Integer> getMapA() {
return mapA;
}
public void setMapA(Map<String, Integer> mapA) {
this.mapA = mapA;
}
public Map<String, String> getMapB() {
return mapB;
}
public void setMapB(Map<String, String> mapB) {
this.mapB = mapB;
}
public Map<String, String> getMapC() {
return mapC;
}
public void setMapC(Map<String, String> mapC) {
this.mapC = mapC;
}
public Map<String, List<String>> getMapD() {
return mapD;
}
public void setMapD(Map<String, List<String>> mapD) {
this.mapD = mapD;
}
public Map<String, Map<String, String>> getMapE() {
return mapE;
}
public void setMapE(Map<String, Map<String, String>> mapE) {
this.mapE = mapE;
}
public Map<String, MyBean2> getMapF() {
return mapF;
}
public void setMapF(Map<String, MyBean2> mapF) {
this.mapF = mapF;
}
@Override
public String toString() {
return String.format("MyMap [mapA=%s,\n mapB=%s,\n mapC=%s,\n mapD=%s,\n mapE=%s,\n mapF=%s]", mapA, mapB, mapC, mapD,
mapE, mapF);
}
}進行測試用的類Test3Class.java:
package testspringboot.test3;
import java.util.List;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
@Component
public class Test3Class {
@Value("${a}")
public String a;
@Value("${val.b}")
public int b;
@Value("${val.c}")
public boolean c;
@Autowired
public Environment env;
@Resource
public MyBean bean;
@Resource
public MyBean2 bean2;
@Value("${myArrayA[3]}")
public String arrayA_3;
@Value("${myArrayB[1]}")
public String arrayB_1;
@Value("${myListC}")
public List<Integer> list;
@Value("${myListC}")
public Set<String> set;
@Value("${myListC}")
public String[] array;
@Resource
public MyList mylist;
@Resource
public MyMap mymap;
@PostConstruct
public void fun() {
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(env.getProperty("val.d"));
System.out.println(bean);
System.out.println(bean2);
System.out.println(arrayA_3);
System.out.println(arrayB_1);
System.out.println(list);
System.out.println(set);
System.out.println(array);
System.out.println(mylist);
System.out.println(mymap);
}
}啟動類(只測配置文件,所以設置WebApplicationType.NONE關閉web服務):
package testspringboot.test3;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Test3Main {
/**
* @param args
*/
public static void main(String[] args) {
SpringApplication sapp = new SpringApplication(Test3Main.class);
sapp.setWebApplicationType(WebApplicationType.NONE);
sapp.run(args);
}
}執(zhí)行結果:

到此這篇關于SpringBoot讀寫操作yml配置文件方法的文章就介紹到這了,更多相關SpringBoot讀寫操作yml 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Lombok注解之@SuperBuilder--解決無法builder父類屬性問題
這篇文章主要介紹了Lombok注解之@SuperBuilder--解決無法builder父類屬性問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
詳解基于java的Socket聊天程序——服務端(附demo)
這篇文章主要介紹了詳解基于java的Socket聊天程序——服務端(附demo),具有一定的參考價值,感興趣的小伙伴們可以參考一下。2016-12-12
java利用Future實現(xiàn)多線程執(zhí)行與結果聚合實例代碼
這篇文章主要給大家介紹了關于java利用Future實現(xiàn)多線程執(zhí)行與結果聚合的相關資料,Future模式的核心,去除了主函數(shù)的等待時間,并使得原本需要等待的時間段可以用于處理其他業(yè)務邏輯,需要的朋友可以參考下2021-12-12
java實現(xiàn)ip地址與十進制數(shù)相互轉換
本文介紹在java中IP地址轉換十進制數(shù)及把10進制再轉換成IP地址的方法及實例參考,曬出來和大家分享一下2012-12-12

