SpringBoot的配置檔案詳解
1.配置檔案
SpringBoot使用一個全域性的配置檔案,配置檔案是固定的
*application.properties
*appication.yml
配置檔案的作用:修改SpringBoot 自動配置的預設值;SpringBoot在底層給我們配置好了
YAML(YAML Ain't Markup Language)
YAML A Markup Language:是一個標記語言
YAML isn't Markup Language:不是一個標記語言;
標記語言:
以前的配置檔案;大多都使用的是x x x.xml檔案
YAML:以資料為中心,比json、xml 更適合做配置檔案
YAML配置例子:
server.port=8088
properties配置例子:
server.port=8089
xml配置檔案例子:
<server>
<port>8081</port>
</server>
2.YAML語法
1.基本語法
K:(空格)v :表示一組鍵值對(必須有空格)
以空格的縮排來控制層級關係;只要是左對齊的一列資料,都是同一個層級的
server: port:8082 path:/zch
屬性和值也是大小值敏感
2.值得寫法
字面量:普通的值(數字,字串,布林值)
k: v :字面直接來寫
字串預設不用加上單引號或者雙引號
"":雙引號;不會轉移字串裡面的特殊字元;特殊字元會作為本身想表示的意思
name: "zhang \n san" 輸出為 zhang換行san
'':單引號;會轉義特殊字元,特殊字元最終只是一個普通的字串資料
name: "zhang \n san" 輸出為 zhang \n san
3.物件、Map(屬性和值)(鍵值對)
物件名:在下一行寫物件的屬性和值的關係;注意縮排
物件還是k: v 的方式
person:
lastName: 張三
age: 18
行內寫法:
person: {lastName:zch,age :44}
4.陣列(list,set)
用 - 值表示陣列中的一個元素
pets:
- cat
- dog
- pig
行內寫法:
pets: [cat,dog,pig]
3.配置檔案注入值(此處以YAMl檔案為例)
1.配置檔案
server:
port: 8081
person:
lastName: 張三
age: 18
boss: true
birth: 2018/12/02
map: {k1: c,k2: z}
lists:
- zz
- bb
dog:
name: Tom
age: 12
2.javaBean:
package com.hbsi.bean;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.validation.constraints.Email;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
/*
* 將配置檔案中配置的每一個屬性的值,對映到這個元件
* @ConfigurationProperties:告訴SpringBoot將本類中所有屬性和配置檔案中相關的配置進行繫結;
* 只有這個元件是容器中的元件,才能用容器提供的@ConfigurationProperties功能
*/
@Component
@ConfigurationProperties(prefix = "person")
//@Validated
public class Person {
//可以通過@Value獲取配置檔案中某一個值
//@Email
//@Value("${person.lastName}") 將@ConfigurationProperties註釋,使用@Value也能獲取配置檔案中的值
private String lastName;
private Integer age;
private boolean boss;
private Date birth;
private Map<String, String> map;
private List lists;
private Dog dog;
}
4.配置檔案佔位符
1.隨機數
${random.value}、${random.int}、${random.long} 2 ${random.int(10)}、${random.int[1024,65536]}
2.佔位符獲取之前配置的值,如果沒有可以用:指定預設值
#person.last-name=abc¸${random.uuid}
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=${person.last-name:hello}_dog 9
person.dog.age=15
5.Profile
Profile是Spring對不同環境提供不同配置功能的支援,可以通過啟用、指定引數等方式快速切換環境。
1.多Profile檔案
我們在主配置檔案編寫的時候,檔名可以是application-{profile}.properties/yml
application.properties:預設全域性配置檔案
application-dev.properties:開發環境
application-prod.properties:生產環境
application-test.properties:測試環境
預設使用application.properties的配置;可以在預設配置檔案中指定啟用哪個profile
spring.profile.active=dev 啟用開發環境
2.yml支援多文件快方式
server:
port: 8080
spring:
profiles:
active: dev #開發環境 active:dev 開發環境被啟用(埠8084) 如果不寫預設為(8080)
---
server:
port: 8084
spring:
profiles: dev 開發環境
---
server:
port: 8085
spring:
profiles: prod 生產環境
---
server:
port: 8086
spring:
profiles: test
3.啟用指定profile
1、在配置檔案中指定 spring.profiles.active=dev
2、命令列:
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev; 可以直接在測試的時候,配置傳入命令列引數
3、虛擬機器引數;
-Dspring.profiles.active=dev
6.配置檔案載入位置
springboot啟動會掃描以下位置的application.properties或者application.yml檔案作為SpringBoot的預設配置檔案
-file:/config/
-file:/
-classpath:/config/
- classpath:/
優先順序由高到低,高優先順序的配置會覆蓋低優先順序的配置。
SpringBoot會從這四個位置載入配置檔案;互補配置
專案打包好以後,我們可以使用命令列引數的形式,啟動專案的時候來指定配置檔案的新位置;指定配置檔案和預設載入的這些配置檔案共同起作用形成互補配置。
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties
7.外部配置載入順序
SpringBoot也可以從以下位置載入配置; 優先順序從高到低;高優先順序的配置覆蓋低優先順序的配置,所有的配置會
1.命令列引數
所有的配置都可以在命令列上進行指定
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc多個配置用空格分開; --配置項=值
2.來自java:comp/env的JNDI屬性
3.Java系統屬性(System.getProperties())
4.作業系統環境變數
5.RandomValuePropertySource配置的random.*屬性值由jar包外向jar包內進行尋找;優先載入帶profile
6.jar包外部的application-{profile}.properties或application.yml(帶spring.profile)配置檔案
7.jar包內部的application-{profile}.properties或application.yml(帶spring.profile)配置檔案再來載入不帶profile
8.jar包外部的application.properties或application.yml(不帶spring.profile)配置檔案
9.jar包內部的application.properties或application.yml(不帶spring.profile)配置檔案
[email protected]註解類上的@PropertySource 11.通過SpringApplication.setDefaultProperties指定的預設屬性 所有支援的配置載入來源;