Spring Boot詳解配置文件有哪些作用與細則
一.配置文件的作用
配置文件是非常重要的,整個項目中所有的重要數據都是在配置文件中進行配置的例如:
- 數據庫的連接信息(用戶名和密碼的設置);
- 項目啟動的端口;
- 第三方系統調用的秘鑰信息;
- 可以發現和定位問題的普通日志和異常日志等(日志的級別和持久化);
如果沒有配置文件的話,這些信息就無法進行配置瞭,數據庫無法連接,日志無法查看等這些問題都是對於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配置文件內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- SpringBoot如何讀取配置文件中的數據到map和list
- SpringBoot 屬性配置中獲取值的方式
- springboot如何讀取模板文件
- Spring Boot兩種全局配置和兩種註解的操作方法
- springboot讀取自定義配置文件時出現亂碼解決方案