SpringBoot .yml配置檔案
阿新 • • 發佈:2019-01-28
相關介紹:
SpringBoot支援一種以.yml字尾結尾的配置檔案SpringBoot啟動時也會預設載入application.yml配置檔案。.propertie和.yml配置檔案同時存在時,SpringBoot會優先載入.yml(SpringBoot會把.yml轉化為.properties檔案)
.yml檔案是YAML 語言編寫的。YAML 是專門用來寫配置檔案的語言,非常簡潔和強大
快速入門:
application.yml
ymlEntity:
#String 等價於properties中:ymlEntity.simpleTypeProp=simpleDataType
simpleTypeProp: simpleDataType
#陣列
arrayTypeProp: 1,2,3,4,5,6,7,8
#集合型別:List
listTypeProp:
- oneData
- twoData
- threeData
#集合型別:Map
mapTypeProp:
key1: value1
key2: value2
key3: value3
#複雜型別:List<Map>
ListMapProp:
- id: 123456
name: zjh
- age: 18
addr: 海淀
#支援變數引用:
- param: "${ymlEntity.simpleTypeProp},${ymlEntity.simpleTypeProp}"
student: {id: 12345, name: zjhTest,age: ~}
YmlEntity類引用配置項屬性值:因為是通過Get/Set方法把配置項給對應物件屬性賦值,所以必須生成Set/Get方法。
1、 key: value 中間的空格不可少。
2、 使用縮排表示層級關係
3、 縮排時不允許使用Tab鍵,只允許使用空格。
4、 縮排的空格數目不重要,只要相同層級的元素左側對齊即可。
5、 # 表示註釋,從這個字元一直到行尾,都會被解析器忽略。
6、 使用變數時”${ymlEntity.simpleTypeProp}”
7、 ~代表NULL
8、 字串value之中包含空格或特殊字元,需要放在引號之中。
9、 單引號和雙引號都可以使用,雙引號不會對特殊字元轉義。
public class Student {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
@Component
@ConfigurationProperties(prefix="ymlEntity")
public class YmlEntity {
//@Value("${ymlEntity.simpleTypeProp}")
private String simpleTypeProp;
//@Value("${ymlEntity.arrayTypeProp}")
private String [] arrayTypeProp;
//@Value("${ymlEntity.listTypeProp}")
private List<String> listTypeProp;
//@Value("${ymlEntity.mapTypeProp}")
private Map<String,String> mapTypeProp;
//@Value("${ymlEntity.ListMapProp}")
private List<Map<String,String>> ListMapProp;
//@Value("${ymlEntity.student}")
private Student student;
public void setSimpleTypeProp(String simpleTypeProp) {
this.simpleTypeProp = simpleTypeProp;
}
public void setArrayTypeProp(String[] arrayTypeProp) {
this.arrayTypeProp = arrayTypeProp;
}
public void setListTypeProp(List<String> listTypeProp) {
this.listTypeProp = listTypeProp;
}
public void setMapTypeProp(Map<String, String> mapTypeProp) {
this.mapTypeProp = mapTypeProp;
}
public void setListMapProp(List<Map<String, String>> listMapProp) {
ListMapProp = listMapProp;
}
public String getSimpleTypeProp() {
return simpleTypeProp;
}
public String[] getArrayTypeProp() {
return arrayTypeProp;
}
public List<String> getListTypeProp() {
return listTypeProp;
}
public Map<String, String> getMapTypeProp() {
return mapTypeProp;
}
public List<Map<String, String>> getListMapProp() {
return ListMapProp;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}
@Value測試失敗。@Value註解不支援.yml
@ConfigurationProperties(prefix=”ymlEntity”)註解在建立Bean時會把該字首的配置項與屬性值一一對應賦值。需要新增Maven依賴:
<!-- 支援 @ConfigurationProperties 註解 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
DemoApplicationTests
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
@Autowired
private YmlEntity ymlEntity;
@Test
public void contextLoads() {
System.out.println("ymlEntity.simpleTypeProp:"+ymlEntity.getSimpleTypeProp());
System.out.println("ymlEntity.arrayTypeProp:"+ JSON.toJSONString(ymlEntity.getArrayTypeProp()));
System.out.println("ymlEntity.listTypeProp:"+ymlEntity.getListTypeProp());
System.out.println("ymlEntity.mapTypeProp:"+ymlEntity.getMapTypeProp());
System.out.println("ymlEntity.ListMapProp:"+ymlEntity.getListMapProp());
System.out.println("ymlEntity.student:"+ymlEntity.getStudent().toString());
}
}