4springboot的配置文件及yml使用


配置文件

作用:spring boot 自動配置(約定,8080 ).可以使用配置文件 對默認的配置 進行修改

application.properties的修改方式

 

yml修改方式

 

例子:

把默認端口8080修改為8888,訪問成功:

 

 

默認全局配置文件有兩種類型:

  application.properties

    操作:application.properties采用 :key=value  形式進行配置,無論是配置什么類型的數據,都是 k = v 形式配置,有時候給一個類的屬性賦值,這個屬性套了很多層,那么只有k變長一點,value不變,例:  server.servlet.encoding.charset= UTF-8  ,server.servlet.encoding.charset這個是key , 后面的UTF-8是值。

 

  application.yml 

    application.ymlyaml ain't myarkup language ,不是一個標記文檔   

xml:是一個標記文檔,如下:

  <server>
    <port>8882</port>
    <path>/a/b/c</path>
  </server>

 

yml語法

  •    key:空格value 
  •    通過垂直對齊 指定層次關系
  •    value默認可以不寫引號; ""會將其中的轉義符進行轉義(也就是說加了雙引號的value,里面如果包含\n換行會生效,而單引號/不加任何符號則直接輸出),其他不會

 

yml寫法有兩種形式,不過只有Java的八大基本數據類型是不區分  行內寫法/垂直對齊寫法

yml行內寫法

接下來用下面的例子展示yml不同數據類型的行內寫法

 yml除了可以配置之外,還可以屬性綁定:

例:創建一個實體類對象,並且綁定屬性

 

@Component  //把實體類加入ioc容器
@ConfigurationProperties(prefix = "student") //屬性綁定聲明  這里的student對應yml那邊的student
public class Student {
    private String name;   //字符串類型
    private int age;       //整型
    private boolean sex;    //布爾型
    private Date birthday;     //日期型
    private Map<String,Object> location;       //Map集合
    private String[] hobbies;       //字符串數組
    private List<String> skills;    // list集合
    private Pet pet;//寵物        //對象類型
  
    
      getter/setter方法省略,自己可以生成
    toString省略 }

 

補充Pet類:

public class Pet {
    int age;
    String name;

    getter/setter省略
  toString省略 }

然后在yml配置文件注入值,首先是使用行內寫法:

 

Student:
  name: zs
  age: 23
  sex: true
  #上面三個都是基本數據類型,不區分寫法,直接寫

  #日期類型
  birthday: 2019/02/12

  #map集合
  location: {province: 廣東,city: 廣州,zone: 增城區}

  #數組和list\set集合 輸入格式一樣 ,中括號可以省略
  hobbies: [足球,籃球]

  #list集合
  skills: [編程,金融]

  #對象類型
  pet: {name: wc11,strain: hsq}

總結:行內寫法,map集合和對象類型一樣形式是 {key:空格value , .. };數組和list/set集合都一樣是[a,b,c] 中括號還可以省略。

 

yml垂直對齊寫法

Student:
  name: zs
  age: 23
  sex: true
  #上面三個都是基本數據類型,不區分寫法,直接寫

  #日期類型
  birthday: 2019/02/12

  #map集合
  location:
    province: 廣東
    city: 廣州
    zone: 增城區

  #數組和list\set集合 輸入格式一樣
  hobbies:
  - 足球
  - 籃球

  #list集合
  skills:
  - 編程
  - 金融

  #對象類型
  pet:
    name: wc11
    age: 12

垂直對齊形式,map集合和對象類型是同一寫法,格式如下:

map/對象類型

  key:空格value

  key:空格value

而數組和list/set集合也一樣,格式如下:

數組/list/set:

  -空格xx

  -空格xx

 

數據綁定后,在測試類里面裝配一個學生對象測試:

數據綁定成功,如上圖輸出了綁定的數據信息, yml里面配置的屬性確實打印出來的,測試成功。

 注意:@Qualifier()注解要結合@Autowire()注解才生效,另外屬性綁定是通過yml的頭部的student和實體類聲明的@ConfigurationProperties(prefix = "student")名字對應才生效,忽略大小寫。

 

yml總結

application.properties配置方式 : key=value

application.yml配置方式:

   1. key:空格value   簡單屬性配置

   2.通過垂直對齊 指定層次關系

   3.value默認可以不寫引號; ""會將其中的轉義符進行轉義,其他不會

 

數據類型yml的兩種配置方式:

  1、list/set/數組

    1.1 行內寫法  hobbies: [足球,籃球]      中括號可省略

    1.2 垂直方式  hobbies:

            - 足球

            - 籃球

  2、對象/map

    2.1 行內寫法  location :{province: 廣東,city: 廣州,zone: 增城區}  注意v前面有空格

    2.2 垂直方式  location :  

        province: 廣東
        city: 廣州            通過垂直對齊表示層次關系

 

 

屬性注入

上面我們舉的yml屬性注入例子,是通過@ConfigurationProperties()注解來實現綁定的,還有一個注解可以實現屬性綁定注入。

那就是 @Value("xx")注解,@Value注解可以直接寫到實體類的屬性上面,也可以通過springEL表達式,在配置文件中獲取注入的值。

例子:

上面的例子,我結合了兩個注解的使用,也就是@Value()和@ConfigurationProperties(),他們的屬性都已經綁定注入了,控制台也輸出了結果,可以發現是可以結合使用的,另外在yml沒設置name屬性是因為,會覆蓋@Value()的注入,配置文件的優先級高於@Value()注解。

補充:.properties和.yml文件同時配置一個相同屬性,.properties的會生效,因為優先級高。

@Value()和@ConfigurationProperties()區別

  @configurationProperties @Value
注值方式 批量注入 單個注入
松散語法 支持 不支持
SpringEL語法 不支持 支持
JSR303數據檢驗 支持 不支持
注入復雜類型 支持 不支持

 

 

 

 

 

 

 

1、松散語法:對類似的格式,限制不那么嚴格,比如:變量 userName  =  user_name  =  user-name ,這個三個在松散語法里面都是指同一個屬性。

在yml里面寫了 Student.user-name="zs" ,那邊的實體類名字雖然是userName,但是還是會被注入值。

 

2、SpringEL語法:格式  ${對象.變量名},注意只能在@Value注解中使用,因為只有@Value支持SpEL語法,如下

 

 

 

3、JSR303數據檢驗:例如我有一個屬性是Email,那么注冊的時候需要寫if語句/正則表達式判斷是否為郵箱類型,有了JSR303數據檢驗就可以用一個注解搞定,如下:

@Validated  //開啟jsr303數據檢驗的注解
public class Student {

    @Email   
    String email;
View Code

然后在yml文件那邊郵箱亂填一些數據,運行如下圖:

如果郵箱格式錯誤,就會拋出異常,另外我這個@Email注解使用的依賴如下:

<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.2.4.Final</version>
        </dependency>

注意,@Email注解使用依賴版本太高(例如:6.0.18版本)會無效,甚至運行不起來。

下面測試@Value()注解不支持JSR303數據檢驗:

 

 還有一個復雜類型注入就不測試了,只有@configuration支持注入復雜數據類型,@Value注解不支持復雜類型注入,上面的表格可以自己測試一下。

 

@PropertySource

  作用:指定配置文件被加載。

  springboot默認會加載application.properties/application.yml文件中的數據,但是如果自己配置的屬性不在這兩個文件中呢,比如我在conf.properties中配置了屬性,那么就要使用@PropertySource注解在實體類加載conf.properties配置文件。

@PropertySource(value = "{classpath:conf.properties}")  //聲明當前student實體類加載conf.properties配置文件
public class Student {
...

但是,@PropertySource注解只能加載.properties文件,不能加載.yml文件.

The end.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM