1. 程式人生 > 其它 >SpringBoot配置檔案application

SpringBoot配置檔案application

配置檔案

SpringBoot使用一個全域性的配置檔案 , 配置檔名稱是固定的,有兩種檔案格式:

application.properties

語法結構 :key=value

application.yml

語法結構 :key:空格 value

配置檔案的作用 :其實SpringBoot在底層都給我們自動配置好了,但實際開發中有些情況自定義配置,所以該配置檔案的作用就是修改替換SpringBoot自動配置的預設值;

yaml概述

YAML是 "YAML Ain't a Markup Language" (YAML不是一種標記語言)的遞迴縮寫。在開發的這種語言時,YAML 的意思其實是:"Yet Another Markup Language"(仍是一種標記語言)

這種語言以資料為中心,而不是以標記語言為重點!

以前的配置檔案,大多數都是使用xml來配置;比如一個簡單的埠配置,我們來對比下yaml和xml

傳統xml配置:

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

yaml配置:

server:
  prot: 8080

yaml基礎語法

說明:語法要求嚴格!

1、空格不能省略

2、以縮排來控制層級關係,只要是左邊對齊的一列資料都是同一個層級的。

3、屬性和值的大小寫都是十分敏感的。

字面量:普通的值 [ 數字,布林值,字串 ]

字面量直接寫在後面就可以 , 字串預設不用加上雙引號或者單引號;

k: v

注意:

  • “ ” 雙引號,不會轉義字串裡面的特殊字元 , 特殊字元會作為本身想表示的意思;

    比如 :name: "zhou \n jielun" 輸出 :zhou 換行 jielun

  • '' 單引號,會轉義特殊字元 , 特殊字元最終會變成和普通字元一樣輸出

    比如 :name: ‘zhou\n jielun’ 輸出 :zhou\n jielun

物件、Map(鍵值對)

#物件、Map格式
k: 
    v1:
    v2:

#例如:
student:
    name: zhoujielun
    age: 30

#行內寫法
student: {name: qinjiang,age: 
3}

陣列( List、set )

用 - 值表示陣列中的一個元素,比如

pets:
 - cat
 - dog
 - pig

#行內寫法
pets: [cat,dog,pig]

yaml檔案更強大的地方在於,他可以給我們的實體類直接注入匹配值!

yaml注入配置檔案

1、在springboot專案中的resources目錄下新建一個檔案 application.yml,配置一個物件

person:
  name: jielun
  age: 30
  happy: false
  birth: 2000/01/01
  maps: {k1: v1,k2: v2}
  lists:
   - code
   - girl
   - music
  dog:
    name: 狗狗
    age: 1

2、編寫一個實體類Person;

@Component //註冊bean到容器中
public class Person {
    private String name;
    private Integer age;
    private Boolean happy;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
    
    //有參無參構造、get、set方法、toString()方法  
}

在實體類配置:@ConfigurationProperties(prefix = "person")

此時,IDEA 提示,springboot配置註解處理器沒有找到,讓我們看文件,我們可以檢視文件,找到一個依賴!

得知需要新增一個依賴:

        <!-- 匯入配置檔案處理器,配置檔案進行繫結就會有提示,需要重啟 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

在測試類測試列印配置注入結果:

    @Autowired
    Person person; //將person自動注入進來

    @Test
    public void contextLoads() {
        System.out.println(person); //列印person資訊
    }

列印:

載入指定的配置檔案

@configurationProperties:是預設從全域性配置檔案中獲取值的,很多場景是需要從指定配置檔案載入的,這時候需要:

@PropertySource :載入指定的配置檔案 +@Value來具體注入

例如:

新建一個person.properties配置檔案,檔案內容name=jielun

然後在我們的程式碼中指定載入person.properties檔案

@PropertySource(value = "classpath:person.properties")
@Component //註冊bean
public class Person {

    @Value("${name}")
    private String name;

    ......  
}

yaml非常強大,還可以有下面的操作:

配置檔案佔位符

例如編寫佔位符生成uuid、隨機數

測試結果:

到這裡,就有兩種方式了,對比如下:

1、@ConfigurationProperties只需要寫一次即可 , @Value則需要每個欄位都新增

2、鬆散繫結:比如我的yml中寫的last-name,這個和lastName是一樣的, - 後面跟著的字母預設是大寫的。這就是鬆散繫結。可以測試一下

3、JSR303資料校驗 , 這個就是我們可以在欄位是增加一層過濾器驗證 , 可以保證資料的合法性

4、複雜型別封裝,yml中可以封裝物件 , 使用value就不支援

結論:

配置yml和配置properties都可以獲取到值 , 強烈推薦 yml;

如果我們在某個業務中,只需要獲取配置檔案中的某個值,可以使用一下 @value;

如果說,我們專門編寫了一個JavaBean來和配置檔案進行一一對映,就直接@configurationProperties,不要猶豫!