SpringBoot學習總結——配置文件

一、YAML用法

1、簡介

springboot默認有兩種配置文件

  • application.properties
  • application.yml(建議使用)
    文件名固定,存放在classpath:/或classpath:/config/目錄下
    可以通過配置文件修改springboot的默認配置
    例如 server.servlet.context-path=/springboot 設置訪問路徑server.servlet.context-path詳細用法
    注:springboot2.0中部分配置與springboot1.0中不同,有的被重命名或刪除

2、YAML用法

YAML不是一種標記語言,是專門來寫配置文件的語言,以數據爲中心,簡潔和強大,比xml、properties等更適合配置文件的編寫

YAML文件的後綴名爲.yml或.yaml

兩者比較

  • yaml
    在這裏插入圖片描述

  • properties
    在這裏插入圖片描述

YAML語法規則

  • 大小寫敏感
  • 使用縮進表示層級關係
  • 縮進時不允許
  • 使用Tab鍵進行縮進,只能使用空格(IDEA中Tab默認爲四個空格)
  • 縮進的空格數目不重要,重要的是相同層級的元素左側要對齊
  • ’ # '表示註釋
server:
    port: 8081	# 寫法 key: value,冒號後面必須有空格
    servlet:
        context-path: /springboot 

基本用法

YAML支持的數據結構有三種:

  • 字面量:單個的,不可再分的值
  • 對象:鍵值對的集合
  • 數組:一組按次序排列的值

三種數據結構的用法:

  1. 字面量:普通的值,如數字、字符串、布爾值
number: 12.5
str: hello
name: 'tom cruise'	#如果字符串包含空格或特殊字符,則必須使用引號引起來,單引號雙引號都可以,但有區別
name1: "tom \n cruise"	#會對特殊字符進行轉義,會被作爲普通字符輸出,結果爲:tom \n cruise
name2: 'tom \n cruise'	#不會對特殊字符進行轉義,結果爲:tom 換行 cruise
  1. 對象:也稱爲映射Map,包含屬性和值
#寫法1:換行寫
user:
    name: tom
    age: 20
    sex: male
#寫法2:行內寫法
user: {name: tom,age: 20,sex: male}
  1. 數組:如List、Set等
#寫法1:一組短橫線開頭的行
names:
    - tom
    - jack
    - alice
#寫法2:行內寫法
name: [tom,jack,alice]

二、爲屬性注入值

通過加載配置文件,爲類中的屬性注入值

使用.yml配置文件

創建一個JavaBean對象(User類)
在這裏插入圖片描述在這裏插入圖片描述
application.yml文件,將要綁定的值
在這裏插入圖片描述
由於啓動SpringBoot時已經加載了applic.yml配置文件,只需要將值綁定過去就好
方法:使用@ConfigurationProperties註解,同時把當前類添加到容器中
在這裏插入圖片描述
@ConfigurationProperties作用:默認讀取全局配置文件獲取值,將當前類中所有屬性與配置文件中的user進行綁定

我們還可以在pom.xml文件中添加依賴方便編寫.yml文件
在這裏插入圖片描述
使用properties配置文件

application.properties文件
在這裏插入圖片描述
注:IDEA中properties文件默認使用UTF-8/GBK編碼,會出現中文的亂碼

解決辦法:在這裏插入圖片描述

重要:如果同時存在application.yml和application.properties同時存在且配置衝突,優先使用application.properties中的配置(application.properties優先級更高)

使用@Value爲屬性注入值
在這裏插入圖片描述
@Value和@ConfigurationProperties的比較

  • @Value只能一個個爲屬性注入值,而@ConfigurationProperties可以批量爲屬性注入值
  • @Value不支持爲複雜類型封裝,而@ConfigurationProperties支持

三、多環境配置

可以爲不同環境提供不同的配置信息,如開發環境、測試環境、生產環境等

兩種方式:

  • 創建多個properties文件
  • 步驟:
    1、創建不同環境的properties文件
    文件命名必須符合application-xxx.properties格式,例如:
    application-dev.properties
    application-test.properties
    application-prod.properties
    2、在application.properties文件中指定要激活的配置
#application.properties文件中指定要激活的配置文件
spring.profiles.active=dev	#激活application-dev.properties文件

  • 定義yml文檔塊
  • 在yml文件中使用三個短橫線(- - -)定義多個文檔塊

步驟:
1、在yml文件中定義多個文檔塊,表示不同的環境配置
2、在第一個文檔塊中指定要激活的配置

server:
    port: 8080
spring:
    profiles:
        active: dev		#激活dev環境
---
spring:
    profiles: dev	#配置環境名稱
server:
    port: 8081
---
spring:
    profiles: test
server:
    port: 8082
---
spring:
    profiles: prod
server:
    port: 8083

四、加載外部配置文件

加載properties屬性文件

問題:@ConfigurationProperties默認是從全局配置文件中獲取值,如果想從外部的自定義屬性文件中獲取值怎麼辦?
解決:使用@PropertySource加載外部的屬性文件(可以加載多個外部的屬性文件)
在這裏插入圖片描述
加載spring配置文件或xml文件

問題:如果確實需要將配置寫在Spring的配置文件中,想加載xml文件怎麼辦?
解決:主配置類中使用@ImportResource加載外部的Spring配置文件
在這裏插入圖片描述
在這裏插入圖片描述
注:SpringBoot中不建議使用加載xml文件

使用註解方式添加組件

推薦使用全註解方式向容器中添加組件,使用@Configuration和@Bean註解
在這裏插入圖片描述

五、自動配置原理

1、執行流程

  1. SpringBoot啓動時加載主配置類,開啓了自動配置功能
    @EnableAutoConfiguration
  2. @EnableAutoConfiguration作用:
    利用@Import({AutoConfigurationImportSelector.class})向容器中添加一些組件(自動配置類)
    查看AutoConfigurationImportSelector中的selectImports()方法
    查看List< String > configurations = this.getCandidateConfigurations(annotationMetadata, attributes); 獲取候選配置
    查看SpringFactoriesLoader.loadFactoryNames方法
    查看loadSpringFactories()方法
    查看classLoader.getResources(“META-INF/spring.factories”)
    掃描所有Jar包路徑下的META-INF/spring.factories文件並加載,獲取EnableAutoConfiguration對應的值(在spring-boot-autoconfigure-2.0.3.RELEASE.jar中)
    將這些自動配置類(xxxAutoConfiguration) 添加到容器中
  3. 通過這些自動配置類來完成響應的自動配置功能

2、原理分析

以HttpEncodingAutoConfiguration爲例,就是以前在web.xml文件中配置的CharacterEncodingFilter過濾器

在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述注意:

  • 根據當前不同的條件判斷,決定自動配置類是否生效,即並不是所有的自動配置類都會生效
  • 自動配置類xxxAutoConfiguration的屬性是從對應的xxxProperties類中獲取的
  • xxxProperties類中的所有屬性是通過配置文件注入綁定的,我們可以通過配置文件指定這些屬性的值

3、總結

  • SpringBoot啓動時會加載大量的自動配置類
  • 通過這些自動配置類向容器中添加組件
  • 通過這些組件來自動完成許多功能,簡化配置
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章