SpringBoot配置文件之properties和yml的使用
一、配置文件的作用
配置文件主要是為了解決硬編碼帶來的問題, 把可能會發(fā)生改變的信息,放在一個集中的地方, 當(dāng)我們啟動某個程序時, 應(yīng)用程序從配置文件中讀取數(shù)據(jù), 并加載運行。
使用配置文件, 可以使程序完成用戶和應(yīng)用程序的交互, 或者應(yīng)用程序與其他應(yīng)用程序的交互。
SpringBoot支持并定義了配置文件的格式,也在另一個層面達到了規(guī)范其他框架集成到SpringBoot的目的。很多項目或者框架的配置信息也放在配置文件中, 比如:
- 項目的啟動端口;
- 數(shù)據(jù)庫的連接信息(包含用戶名和密碼的設(shè)置);
- 第三方系統(tǒng)的調(diào)用密鑰等信息;
- 用于發(fā)現(xiàn)和定位問題的普通日志和異常日志等。
二、配置文件的格式
Spring Boot 配置文件有以下三種:
- application.properties
- application.yml
- application.yaml
yml 為yaml的簡寫, 實際開發(fā)中出現(xiàn)頻率最高。yaml 和yml 的使用方式一樣。
NOTE:
- 理論上講 .properties 和 .yml 可以并存在于一個項目中,當(dāng) .properties 和 .yml 并存時,兩個配置都會加載。如果配置文件內(nèi)容有沖突,則以 .properties 為主,也就是 .properties 優(yōu)先級更高;
- 雖然理論上來講 .properties 可以和 .yml 共存,但實際的業(yè)務(wù)當(dāng)中,通常會采取一種統(tǒng)一的配置文件格式,這樣可以更好的維護(降低故障率)。
三、properties 配置文件說明
properties 配置文件是最早期的配置文件格式,也是創(chuàng)建 SpringBoot 項目默認的配置文件。
3.1 properties 基本語法
properties 是以鍵值的形式配置的,key 和 value 之間是以 "=" 連接的,如:
# 配置項?端?號 server.port=8080 #配置數(shù)據(jù)庫連接信息 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb? characterEncoding=utf8&useSSL=false spring.datasource.username=root spring.datasource.password=root
3.2 讀取配置文件
如果在項目中,想要主動的讀取配置文件中的內(nèi)容,可以使用 @Value 注解來實現(xiàn)。 @Value 注解使用" ${} "的格式讀取,如下代碼所示:
properties 配置如下:
mykey.key1 = bite
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PropertiesController {
@Value("${mykey.key1}")
private String key1;
@RequestMapping("/key")
public String key(){
return "讀取到值:"+key1;
}
}四、yml 配置文件說明
yml 是 YAML 是縮寫,它的全稱 Yet Another Markup Language ,翻譯就是 “另一種標(biāo)記語言“。
4.1 yml基本語法
yml 是樹形結(jié)構(gòu)的配置文件,它的基礎(chǔ)語法是"key: value"。key 和 value 之間使用英文冒號加空格的方式組成, 空格不可省略。
基礎(chǔ)語法舉例如下:
spring: datasource: url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false username: root password: root
4.2 yml 讀取文件
yml 讀取配置的方式和 properties 相同,使用 @Value 注解即可,實現(xiàn)代碼如下:
yml配置:
string: hello: bite
@RestController
public class ReadYml {
@Value("${string.hello}")
private String hello;
@RequestMapping("/ymlKey")
public String key(){
return "讀取到值:"+hello;
}
}NOTE: value值加單雙引號
- 字符串默認不用加上單引號或者雙引號,如果加英文的單雙引號可以表示特殊的含義。
- 單引號會轉(zhuǎn)義特殊字符,使其失去特殊功能,始終是一個普通的字符串;如 \n
- 雙引號不會轉(zhuǎn)義字符串里面的特殊字符, 特殊字符會表示本身的含義。
yml配置不同數(shù)據(jù)類型及null:
#以下格式不代表yml文件格式,只是作為說明 # 字符串 string.value: Hello # 布爾值,true或false boolean.value: true boolean.value1: false # 整數(shù) int.value: 10 # 浮點數(shù) float.value: 3.14159 # Null,~代表null null.value: ~ # "" 空字符串 # 直接后?什么都不加就可以了, 但這種?式不直觀, 更多的表示是使?引號括起來 empty.value: ''
4.3 yml使用進階
4.3.1 配置對象
在yml文件中配置對象,如下所示:
student:
id: 1
name: Java
age: 18
#或者可以采用行內(nèi)寫法
student: {id: 1,name: Java,age: 18}這個時候就不能用 @Value 來讀取配置中的對象了,此時要使用另一個注解@ConfigurationProperties 來讀取,具體實現(xiàn)如下:
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
private int id;
private String name;
private int age;
}調(diào)用類實現(xiàn)如下:
@RestController
public class StudentController {
@Autowired
private Student student;
@RequestMapping("/readStudent")
public String readStudent(){
return student.toString();
}
}4.3.2 配置集合
配置文件也可以配置 list 集合,如下所示:
dbtypes: name: - mysql - sqlserver - db2
集合的讀取和對象一樣,也是使用 @ConfigurationProperties 來讀取的,具體實現(xiàn)如下:
@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
private List<String> name;
}訪問集合的實現(xiàn)如下:
@RestController
public class ReadYml2 {
@Autowired
private ListConfig listConfig;
@RequestMapping("/readList")
public String readList(){
return listConfig.toString();
}
}4.3.3 配置Map
配置文件也可以配置 Map,如下所示:
maptypes: map: k1: kk1 k2: kk2 k3: kk3
Map的讀取和對象一樣,也是使用 @ConfigurationProperties 來讀取的,具體實現(xiàn)如下:
@Component
@ConfigurationProperties("maptypes")
@Data
public class MapConfig {
private HashMap<String,String> map;
}打印類的實現(xiàn)如下:
@RestController
public class ReadYml2 {
@Autowired
private MapConfig mapConfig;
@RequestMapping("/readMap")
public String readStudent(){
return mapConfig.toString();
}
}總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot使用Spring-Data-Jpa實現(xiàn)CRUD操作
這篇文章主要為大家詳細介紹了SpringBoot使用Spring-Data-Jpa實現(xiàn)CRUD操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-08-08
SpringBoot+MyBatis報錯:Invalid bean definition的原因排查與
這篇文章主要為大家詳細介紹了SpringBoot+MyBatis報錯:Invalid bean definition的原因排查與解決方法,文中的示例代碼講解詳細,希望對大家有所幫助2025-09-09
java實現(xiàn)6種字符串?dāng)?shù)組的排序(String array sort)
這篇文章主要介紹了java實現(xiàn)6種字符串?dāng)?shù)組的排序(String array sort),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
mybatis?對于生成的sql語句?自動加上單引號的情況詳解
這篇文章主要介紹了mybatis?對于生成的sql語句?自動加上單引號的情況詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01

