前言
?Spring Boot是一個開源的Java框架,用于快速構(gòu)建應(yīng)用程序和微服務(wù)。它基于Spring Framework,通過自動化配置和約定優(yōu)于配置的方式,使開發(fā)人員可以更快地啟動和運行應(yīng)用程序。Spring Boot提供了許多開箱即用的功能和插件,包括嵌入式Web服務(wù)器、安全性、數(shù)據(jù)訪問、緩存、測試和監(jiān)控等,極大地簡化了開發(fā)人員的工作。同時,Spring Boot還提供了可擴展性和可定制性,讓開發(fā)人員可以根據(jù)特定的需求完全自定義應(yīng)用程序。本文就 SpringBoot 項目中配置文件的作用以及兩種不同形式的配置文件的使用分別進行闡述。
1 配置文件
配置文件是一種存儲應(yīng)用程序配置信息的文件,它包含了應(yīng)用程序所需要的各種參數(shù)、選項和設(shè)置。
2 為什么需要配置文件?
Spring Boot 配置文件是一個特殊的文件,用來配置 Spring Boot 應(yīng)用程序的行為。在 Spring Boot 應(yīng)用程序中,可以使用多種配置文件格式,包括 properties、YAML、XML 等。配置文件通常包含應(yīng)用程序的參數(shù)、數(shù)據(jù)庫連接等信息,可以讓應(yīng)用程序在不同的環(huán)境中運行,例如開發(fā)、測試、生產(chǎn)等環(huán)境。
項目中重要的信息都是在配置文件中去設(shè)置的,例如:
- 數(shù)據(jù)庫的連接信息,包括用戶名和密碼等;
- 項目的啟動端口;
- 第三方系統(tǒng)的調(diào)用密鑰等信息;
- 用于發(fā)現(xiàn)和定位問題的普通日志和異常日志等。
配置文件的作用在于:
-
靈活性:通過配置文件,用戶可以根據(jù)自己的需求來修改應(yīng)用程序的參數(shù),而不必修改應(yīng)用程序的代碼。
-
維護性:將應(yīng)用程序的參數(shù)存儲在配置文件中,可以使得維護者更容易理解應(yīng)用程序的功能和行為。
-
共享性:配置文件可以共享給多個用戶或多個應(yīng)用程序使用,從而降低了編寫重復(fù)代碼的工作量。
-
安全性:一些敏感信息如數(shù)據(jù)庫連接字符串、密碼等可以單獨存儲在配置文件中,可以防止這些信息被惡意利用或修改。
Spring Boot常見的配置文件有兩種:.properties
or .yml
, 理論上來說,允許兩種格式的配置文件可以同時存在。但是,在實際項目開發(fā)中,為了可以更好的維護并降低故障發(fā)生的概率,我們通常只使用其中一種格式的配置文件。需要特別注意的是,properties 格式的配置的優(yōu)先級大于 yml 格式的配置文件。
3 properties 格式的配置文件
properties 的語法是用鍵值對的形式組織的,key 與 value 之間使用 “=” 連接,并不需要多余的空格或者縮進,示例代碼如下:
# 端口配置
server.port=8888
# 數(shù)據(jù)庫連接配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/databaseName?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
# 自定義配置項
myTestConfigName=Huang
如何讀取配置文件?
若想要主動讀取配置文件的信息,可以使用@Value
注解,該注解使用${}
格式讀取,以下代碼演示如何讀取上述代碼中的自定義配置項 myConfigName=Huang
:
@Value("${myTestConfigName}") // 獲取自定義配置項
private String myTestConfigName;
@PostConstruct
public void postConstruct() {
System.out.println("myTestConfigName: " + myTestConfigName);
}
對于初學(xué)者來說,properties格式的配置文件由于不需要各種縮進和空格的格式控制,因此,可以避免很多錯誤。但是,properties格式對中文支持并不好,會出現(xiàn)亂碼的情況。其次,由于其是key=value
形式存儲的,會導(dǎo)致代碼有很多冗余信息:
要想解決上述問題,可以使用 yml 格式的配置文件解決~
4 yml 格式的配置文件
YAML(全稱 Yet Another Markup Language, 另一種標(biāo)記語言)是一種層級的、非常易讀的標(biāo)記語言。經(jīng)常用于不同編程語言之間的數(shù)據(jù)傳輸。
- yml 是?個可讀性?,寫法簡單、易于理解,它的語法和 JSON 語?類似。
- yml ?持更多的數(shù)據(jù)類型,它可以簡單表達清單(數(shù)組)、散列表,標(biāo)量等數(shù)據(jù)形態(tài)。它使?空?符號縮進和?量依賴外觀的特?,特別適合?來表達或編輯數(shù)據(jù)結(jié)構(gòu)、各種配置?件等。
- yml ?持更多的編程語?,它不?是 Java 中可以使?在 Golang、PHP、Python、Ruby、JavaScript、Perl 中。
4.1 yml 基本語法
yml 是樹形結(jié)構(gòu)的配置?件,它的基礎(chǔ)語法是“key: value”,注意 key 和 value 之間使?英?冒號加空格的?式組成的,其中的空格不可省略。
使用 yml 格式配置端口號和數(shù)據(jù)庫連接信息的代碼如下:
# 優(yōu)先級 properties > yml 格式, 但是 yml 格式能夠解決中文亂碼問題, 并且能夠適配多種編程語言
server:
port: 8080
# 數(shù)據(jù)庫連接配置
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/databaseName?characterEncoding=utf8
username: root
password: root
相較 properties,代碼冗余度降低~
4.2 yml 配置不同類型及null
# 字符串
string.value: Hello
# 布爾值,true或false
boolean.value1: true
boolean.value2: false
# 整數(shù)
int.value1: 77
int.value2: 0b1010_0111_0100_1010_1110 # ?進制
# 浮點數(shù)
float.value1: 3.14159
float.value2: 314159e-5 # 科學(xué)計數(shù)法
# Null,~代表null
null.value: ~
需要特別注意的是,字符串類型是否帶有引號,讀取出來是有區(qū)別的~
# 字符串
string:
myString1: 你好, \n世界
myString2: '你好, \n世界'
myString3: "你好, \n世界"
讀取配置信息的代碼如下:
@Value("${string.myString1}")
private String myString01;
@Value("${string.myString2}")
private String myString02;
@Value("${string.myString3}")
private String myString03;
@PostConstruct
public void postConstruct() {
System.out.println("string.myString1: " + myString01 + "\n" +
"string.myString2: " + myString02 + "\n" +
"string.myString3: " + myString03 + "\n");
}
可見,只有帶有雙引號的字符串,轉(zhuǎn)義字符才能被正常解析。對于無引號和單引號的情況,轉(zhuǎn)義字符會原封不動的打印出來~
4.3 使用 yml 配置對象
在 yml 配置對象示例如下:
# 自定義對象
student:
id: 1
name: "黃小黃"
age: 20
也可以采用行內(nèi)的寫法,作用與上述代碼一致:
student: {id: 1,name: "黃小黃",age: 20}
如果想要主動讀取配置對象的信息,則不能使用 @Value
注解,可以采用 @ConfigurationProperties
來讀取,具體實現(xiàn)如下:
@Component
@ConfigurationProperties("student")
@Data
public class Student {
private int id;
private String name;
private int age;
}
在以上代碼中,getter、setter以及toString方法均通過lombok實現(xiàn)。需要注意的是@ConfigurationProperties注解中的內(nèi)容,需要與配置文件中對象的key相同。
調(diào)用類的代碼如下:
@Autowired
private Student student;
@PostConstruct
public void postConstruct() {
System.out.println("student: " + student);
}
4.4 使用 yml 配置集合
同樣地,使用 yml 配置 list 集合也有兩種方式:
dbtypes:
name:
- mysql
- sqlserver
- db2
行內(nèi)寫法如下:
dbtypes: {name: [mysql,sqlserver,db2]}
與配置集合相同,也可以采用 @ConfigurationProperties
來讀取,具體實現(xiàn)如下:
@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
private List<String> name;
}
調(diào)用類的代碼如下:
@Component
public class ReadListYml {
@Autowired
private ListConfig listConfig;
@PostConstruct
public void postConstruct() {
System.out.println(listConfig.getName());
}
}
更多系統(tǒng)配置項,請查閱官網(wǎng):https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties
5 Spring Boot讀取指定的配置文件
SpringBoot可以讀取多個配置文件,其中默認(rèn)的是application.properties或application.yml。但有時候我們需要讀取指定的配置文件,可以通過以下步驟實現(xiàn):
-
創(chuàng)建新的配置文件,比如application-dev.properties或application-dev.yml,可以根據(jù)需要命名。
-
在src/main/resources目錄下創(chuàng)建一個名為config的文件夾。
-
將新的配置文件放在config文件夾中。
-
在application.properties或application.yml中添加如下配置:
spring.profiles.active=dev
其中dev可以替換成新配置文件的名稱(不帶擴展名),這樣SpringBoot就會加載config文件夾下對應(yīng)的配置文件。
- 在Java代碼中可以通過@Value注解獲取新配置文件中的屬性值,例如:
@Value("${my.property}")
private String myProperty;
其中my.property是新配置文件中的屬性名。
寫在最后
?本文被 JavaEE編程之路 收錄點擊訂閱專欄 , 持續(xù)更新中。
?以上便是本文的全部內(nèi)容啦!創(chuàng)作不易,如果你有任何問題,歡迎私信,感謝您的支持!文章來源:http://www.zghlxwxcb.cn/news/detail-519617.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-519617.html
到了這里,關(guān)于【Spring Boot】Spring Boot配置文件詳情的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!