配置文件
全局配置文件 SpringBoot使用一個全局的配置文件,配置文件名固定:application.properties/application.yml
配置文件目錄:在src/main/resource目錄或者類路徑/config下
配置文件作用:修改SpringBoot自動配置的默認值,比如tomcat監聽端口,SpringBoot默認配置爲8080,可以通過application.properties設置server.port=8081,修改監聽端口。
YML基本語法
YML概念:YAML Ain’t Markup Language,YML不是一門標記語言,該語言以數據爲中心
YML和XML對比
YML:
server:
port: 8081
XML
<server>
<port>8081</port>
</server>
YML語法基本規則
k:(空格)v 表示一對鍵值對,其中必須要有空格,yml通過空格的縮進來控制層級關係;只要左對齊的一列數據,都是同一層級的;並且屬性和值對大小寫敏感。
YML各類值的寫法
-
字面量
k: v 字面量直接寫,字符串默認是不需要加上單引號或者雙引號
單引號 不會對特殊字符進行轉義,比如\n,輸出字符串,也是\n兩個字符;不加引號也是該效果
雙引號 會對特殊字符進行轉義,比如含有\n,如果打印出來,會是換行;可以理解成字符串 -
對象、Map(鍵值對)
- 多行寫法
需要注意每行開始的空格 - 單行寫法
使用大括號括起來,鍵值對之前使用逗號進行分隔,注意key和value之間的空格
- 多行寫法
maps: {k1: v1, k2: 12}
person:
age: 18
boss: false
birth: 2000/1/1
- 數組(List、Set)
- 多行寫法
每行開始時候使用短橫線 - 單行寫法
使用中括號括起來,鍵值對之前使用逗號進行分隔
- 多行寫法
pets: [cat, dog, sheet]
lists:
- lisi
- zhaoliu
- wangwu
配置文件的注入
這裏只是討論使用不同註解注入的方式,具體配置文件yml和properties都可以使用
- 方式一:@ConfigurationProperties 用來批量導入配置類;需要注意使用 @Component 註解(或者配合@Bean一起使用),讓SpringBoot進行管理;@PropertySource註解,配合使用,可以讀取指定的配置文件位置;@PropertySource(value = {“classpath:person.properties”}) 配合 @Validated 註解,支持JSR303配置校驗
person:
age: 18
boss: false
birth: 2000/1/1
maps: {k1: v1, k2: 12}
lists:
- lisi
- zhaoliu
- wangwu
dog:
name: haha
age: 2
last-name:xiaoming
/**
* 將配置文件中配置的每一個屬性的值,映射到這個組件中
* @ConfigurationProperties 告訴Springboot將本類中所有的屬性和配置文件中的相關配置進行綁定
* prefix = "person" 配置文件中那個下面的屬性進行一一對應
*
* 只有這個組件是容器中的組件,才能使用容器提供的ConfigurationProperties功能
*
* @date 2019/10/23
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
- 方式二:@Value
value=“字面量/${key}從環境變量、配置文件中獲取的值/#{SpEL}表達式”
@Value("${person.lastName}")
private String lastName;
@Value("#{11*2}")
private Integer age;
@Value("true")
private Boolean boss;
Profile多環境支持
場景:測試環境和生產環境需要不同的配置參數,如何在同一套代碼中實現
-
方式一:使用多個properties文件
在主配置文件編寫的時候,文件名可以是 application-{profile}.properties(例如:application-dev.properties)
默認使用application.properties文件 -
方式二:在同一個yml文件中使用多文檔的方式
yml使用“- - -”(三個短橫)來在一個yml文件中分隔多個文檔
server:
port: 8081
spring:
profiles:
active: prod
---
server:
port: 8085
spring:
profiles: dev
---
server:
port: 8086
spring:
profiles: prod
激活指定的profile文件
-
在配置文件中指定
在properties中,在application.properties中使用 spring.profiles.active=dev 指定
在yml文件中,在各個文檔塊裏面配置spring.profiles對應的內容,並且spring.profiles.active 指定 -
命令行方式
在啓動jar包的時候,傳入命令行參數
java -jar *****.jar --spring.profiles.active=dev -
虛擬機參數
-Dspring.profiles.active=dev
配置文件的加載位置
spring boot啓動會掃描以下位置的application.properties或者application.yml文件作爲SpringBoot的默認配置文件
- file:./config/
- file: ./
- -classpath: /config
- -classpath: / 如在IDEA工程中的resources目錄下建立的配置文件
上面是按照優先級從高到低的順序,所有位置的文件都會被加載,高優先級配置內容會覆蓋低優先級的配置內容;並且形成內容互補