天天看點

學習筆記——Spring Boot(2)YAML

YAML文法格式及應用

      項目的屬性配置是學習中的很重要的一點,也就是自動配置時要修改預設屬性的時候,我們就要在配置檔案中做出說明。而配置檔案除了傳統的application.properties,這些年也流行起了application.yml,也就是上面說的YAML。而YAML和property差不多的使用方法,除了文法有些差距。

剛開始先來看看最最傳統的配置檔案的方法:XML方式,它和Property和YAML文法格式之間的差距:

XML:

<server>
    <port>8081</port>
</server>
           

YAML:

server:
  port: 8081
           

Property:

server.port=8081
           

 可以看出,傳統的XML方式大量時間花費在<></>上,YAML就很好的完善和簡化了步驟。

下面我們就先說一下YAML的文法:

(1)表示一對鍵對:”K: V”(注意:冒号和V之間一定要有空格,這是yaml的格式!!!)

(2)YAML是以空格的縮進來控制層級關系,隻要是左對齊的一列資料,都是同一層級的,例如:

people:
    name: 小帥
    age: 20
           

其中name和age是同一層級的

(3)要注意YAML對大小寫敏感,其中如果寫成lastName可以使用last_name替代,即_n可以表示N。

(4)字元串預設不用加上雙引号或單引号,假如加上雙引号,比如“\n”的話就會換行,假如加上單引号,比如‘\n’就直接輸出\n。

(5)除了使用K: V方式,還可以使用行内寫法:

people: {name: zhangsan,age: 18}
           

(6)數組表示:

pets:
   - dog
   - duck
   - chick
           
而行内寫法是pets: [dog,duck,chick]
           

  這些大概就是YAML的大部分文法,想在要說的是配置檔案值的注入,這也是初學時候經常遇到的。

首先在application.yml(配置檔案)中輸入:

people:
    name: 小帥
    age: 20
    handsome: true
    birth: 2018/7/25
    map: {k1: v1,k2: v2}
    lists:
        - 小明
        - 小軍
    dog:
        name: Tom
        age: 2
           

關注一下:people類裡面有string,integer,boolean,data,map,list,甚至還引用了一個類dog。

我們在javaBean中輸入:

//省略了包名和導入的包
@Component
@ConfigurationProperties(prefix="people")
public class People {
     private String name;
     private Integer age;
     private  boolean handsome;
     private Date birth;


     private Map<String,Integer> map;
     private List<String> lists;


     private Dog dog;  //類dog定義好,含name和age
     //省略了toString()函數和get()和set()函數
}
           

再在測試類中做測試:

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {

    @Autowired
    private People people;
   

    @Test
    public void contextLoads() {
        System.out.println(people);
    }

}
           

測試通過,可以看到結果。

另外,在打代碼過程中可能發現提醒:

這是我們需要在POM檔案中加入:

<!-- 導入配置檔案處理器,配置檔案進行綁定時會有提醒-->

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-configuration-processor</artifactId>

    <optional>true</optional>

</dependency>
           

補充:

  這章除了說明YAML的文法和使用,還想說一下幾個在配置檔案注入和與配置檔案使用中很有用的注解:

@ConfigurationProperties():該注解是配置檔案注入的時候必要使用的,而且主要是檔案内容的整體注入的時候,表面該類是一個注入類,它的括号内含有prefix=”xxx”;其中xxx就是配置檔案中整體bean的資訊。舉例:上面中使用@ConfigurationProperties(prefix="people") 表示注入配置檔案中的people。

@Value():該注解和上面的@ConfigurationProperties一樣,都是用于配置檔案的注入的,但是上面的是針對整體,而@Value是針對個體的,也就是獲得某個bean的資訊。使用方法是括号内配合”${xx}”或”#{xx}”使用,而$一般是取得某個bean資訊,舉例子:要取得上面people中的name,則使用@Value(“{people.name}”);而#中可以使用公式,例如@Value(“{11*2}”)。

@PropertySource:用于加載指定的配置檔案,比如此時除了application.properties以外,還建立了一個people.properties,而這時候想使用people.properties作為指定的配置檔案,則隻需要在注入類中類上面加入@ PropertySource(value = {“classpath: person.properties”})即可(在上面例子中@Companent上加)

@ImportResource:導入Spring的配置檔案,讓配置檔案中的内容生效;Spring Boot裡面沒有Spring的配置檔案,我們自己編寫的配置檔案,也不能識别,這時候想讓Spring的配置檔案(beans.xml之類的)生效,這加入@ImportResource。舉例子,為了使beans.xml生效,這時候要加入@ImportResource(locations ={“classpath:beans.xml”}).導入Spring的配置檔案讓其生效

@Bean:給IOC容器中添加元件,代替的是之前xml中的<bean> </bean>的格式。與@Configuration配合使用

繼續閱讀