1. 程式人生 > >SpringBoot的配置檔案詳解

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指定的預設屬性 所有支援的配置載入來源;