咱們知道java 由於歷史的緣由,一直有一個配置地獄的痛點。那麼如何解決掉它呢?
spring boot 是一柄利器,可是呢,仍是要配置。
看來配置的避免不了的了。
那麼如何能夠減輕這種痛苦呢?
yaml 就是一個減輕的利器。java
yaml 是什麼呢? yaml ain't markup languagespring
這是什麼意思呢?解釋的不是一門標記語言。可是不管它怎麼說,他的確是做爲標記語言存在的。api
那麼這個yaml配置放在哪裏裏?數組
放在這下面哈。app
先來熟悉一下yaml語法吧,這裏只是作一些我本身經驗。
下面是菜鳥的,我認爲起碼應該熟悉這個。ide
基本語法 大小寫敏感 使用縮進表示層級關係 縮進不容許使用tab,只容許空格 縮進的空格數不重要,只要相同層級的元素左對齊便可 '#'表示註釋 數據類型 YAML 支持如下幾種數據類型: 對象:鍵值對的集合,又稱爲映射(mapping)/ 哈希(hashes) / 字典(dictionary) 數組:一組按次序排列的值,又稱爲序列(sequence) / 列表(list) 純量(scalars):單個的、不可再分的值
1.key:valuespring-boot
string 類型默認不用加"" 或者 ''
這種類型的話:"" 會轉義,'' 不會轉義。測試
friend: lastname: bob firstname: z
若是是簡單的對象建議這樣寫:friend:{ lastname:bob,firstname:z}
2.這裏介紹一下數組,支持兩種寫法:this
sex - boy - girl
若是是簡單的數組。那麼我建議這樣寫: sex:[boy,girl]scala
yaml 除了這樣寫能讓spring boot讀取到,這是系統自動會去讀取server。
那麼咱們本身定義的配置該如何讀取?
person 類
package com.axm.demo.bean; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; /** * @ConfigurationProperties */ @Component @ConfigurationProperties(prefix ="person") public class Person { private String lastName; private Integer age; private boolean boss; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog; public String getLastName() { return lastName; } @Override public String toString() { return "Person{" + "lastName='" + lastName + '\'' + ", age=" + age + ", boss=" + boss + ", birth=" + birth + ", maps=" + maps + ", lists=" + lists + ", dog=" + dog + '}'; } public void setLastName(String lastName) { this.lastName = lastName; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public boolean isBoss() { return boss; } public void setBoss(boolean boss) { this.boss = boss; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } public Map<String, Object> getMaps() { return maps; } public void setMaps(Map<String, Object> maps) { this.maps = maps; } public List<Object> getLists() { return lists; } public void setLists(List<Object> lists) { this.lists = lists; } public Dog getDog() { return dog; } public void setDog(Dog dog) { this.dog = dog; } }
dog 類
package com.axm.demo.bean; public class Dog { private String name; private Integer ages; @Override public String toString() { return "Dog{" + "name='" + name + '\'' + ", ages=" + ages + '}'; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAges() { return ages; } public void setAges(Integer ages) { this.ages = ages; } }
那麼在yml中這樣寫:
person: lastName: zhangsan age: 18 boss: false birth: 2017/12/12 maps: {k1: v1,k2: 12} lists: - lisi - zhaolu dog: name: 小狗
這裏須要配置的是person中增長註解:
@Component @ConfigurationProperties(prefix ="person")
pom.xml 中增長:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
測試其是否配置成功:
package com.axm.demo; import com.axm.demo.bean.Person; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest class DemoApplicationTests { @Autowired Person person; @Test void contextLoads() { System.out.println(person); } }