首頁 > 軟體

Spring Boot詳解組態檔有哪些作用與細則

2022-07-25 14:00:38

一.組態檔的作用

組態檔是非常重要的,整個專案中所有的重要資料都是在組態檔中進行設定的例如:

  • 資料庫的連線資訊(使用者名稱和密碼的設定);
  • 專案啟動的埠;
  • 第三方系統呼叫的祕鑰資訊;
  • 可以發現和定位問題的普通紀錄檔和異常紀錄檔等(紀錄檔的級別和持久化);

如果沒有組態檔的話,這些資訊就無法進行設定了,資料庫無法連線,紀錄檔無法檢視等這些問題都是對於Spring Boot專案非常關鍵的,因此組態檔是特別重要的!

二.組態檔的格式

組態檔的分類一般是:

  • 系統的組態檔(系統定義好的),如連線字串,紀錄檔的相關設定;
  • 使用者自己定義的;

而Spring Boot的組態檔主要有兩種格式:

  • .properties
  • .yml

就是這樣的兩種格式,而且這裡也一定要這麼寫,不然也是會報錯的(約定大於設定),在這兩個裡面都是可以進行相關組態檔的設定的,兩種格式只是不同時間的產物罷了,另外兩種格式的寫法也是不同的,這個下面會有相關的介紹,而且這兩種格式也是可以並存的,如果兩個都設定了,這裡的設定會採用properties裡面的設定,而忽略yml裡面的設定,因此不建議同時使用兩種格式再同一個專案中!

三.properties組態檔的說明

properties組態檔是更早期的組態檔格式,也是Spring Boot專案預設的組態檔,下面就具體介紹一下properties組態檔:

1.properties基本語法

在properties裡面是以鍵值對為主的(key=value),類似於

這樣的格式(中間不要寫空格,也不要寫多餘的空格)

如果是自定義的組態檔的話,也是key=value的形式,而這是需要自己寫的,如果要讀取這個檔案也只能使用自己定義的key值來得到value值!

2.讀取組態檔

同樣也是使用註解就可以解決這個問題,這裡使用@Value註解以及${}的格式就可以進行讀取了:

@Controller
public class Test {
    @Value("${server.port}") //讀取設定項
    private  String port;
    @ResponseBody  //返回一個非靜態頁面的資料
    @RequestMapping("/func")  //設定路由地址
    public String  func(){
        return "port: " + port;
    }
}

然後通過頁面搜尋http://localhost:8080/func就看有觀察到讀取到的埠號了:

而使用@Value是隻能讀取一個組態檔的話,如果想讀取多個的話,需要多寫幾個@Value標籤就可以了

3.properties的缺點

在properties裡面是採用key=value的形式,而如果是同一key下的value,就需要把此key值重複來寫,這就顯得非常冗餘了

而想要解決這個問題就需要使用yml組態檔了

四.yml組態檔的說明

yml是另一種格式的組態檔,yml 是⼀個可讀性⾼,易於理解,⽤來表達資料序列化的格式,yml的語法和高階語言非常類似,而yml最大的優勢是可以跨語言,像python,golang都可以使用yml作為設定⽂件。下面具體介紹一下yml組態檔:

1.yml基本語法

在yml裡面的基本語法是:key: value,注意key和value之間需要英文冒號加空格,其中的空格也是不可省略的,類似

這樣的語法再寫上面的連線資料庫設定的話,就方便很多了:

補充:yml中關於單、雙引號的問題:yml中如果使用了雙引號就會按照(原)語意執行,如果不加,或者加了單引號,那麼預設就會將字串中的特殊字元進行跳脫,比如n -> n(跳脫)處理。

2.讀取組態檔

yml組態檔的讀取方式也是和properties一樣的,都是使用@Value註解加${}的格式,這裡就不演示了,下面來看一下yml不一樣的地方!

3.設定物件

在yml裡面還是可以設定物件的:

另外也可以使用行內寫法:

而想要讀取到這個物件的話就不能再使用@Value註解了,這裡需要藉助@ConfigurationProperties來讀取:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@ConfigurationProperties(prefix = "student") //讀取組態檔的物件
@Component
public class Student {
    private int id;
    private String name;
    private int age;
}

然後讀取物件,就可以直接進行注入了:

@Controller
public class Test {
    @Autowired
    private Student student;
    @ResponseBody
    @RequestMapping("/getstudent")
    public String getStudent(){
        return "student: " + student;
    }
}

然後通過瀏覽器搜尋http://localhost:8080/getstudent就可以得到物件內容了:

4.設定集合

在yml裡面也是可以設定集合的:

同樣行內寫法也是可以的:

而要獲取到集合的話,和獲取物件是差不多的,也是通過@ConfigurationProperties來獲取:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
@Data
@ConfigurationProperties(prefix = "dbtypes")
@Component
public class ListConfig {
    private List<String> name;
}

讀取集合:

@Controller
public class Test {
    @Autowired
    private ListConfig listConfig;
    @ResponseBody
    @RequestMapping("/getlist")
    public String getList(){
        return "name:" + listConfig.getName();
    }
}

然後通過瀏覽器搜尋http://localhost:8080/getlist就可以得到物件內容了:

五.properties和yml的區別

  • properties是以key=value的形式設定的鍵值對型別組態檔,而yml是以key: value的形式設定的鍵值對型別組態檔;
  • properties是早期且系統預設的組態檔格式,但設定存在一定的冗餘資料,而yml可以更好的解決資料冗餘問題;
  • yml通用性更好,支援多語言;
  • yml支援更多的資料型別;

到此這篇關於Spring Boot詳解組態檔有哪些作用與細則的文章就介紹到這了,更多相關Spring Boot組態檔內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com