一篇文章帶你搞懂 SpringBoot 的配置文件

一、SpringBoot 配置文件類型

1. SpringBoot配置文件類型和作用

SpringBoot 是基於約定的,所以很多配置都有默認值,但如果想使用自己的配置替換默認配置的話,就可以使用 application.properties或者application.yml(application.yaml)進行配置。

SpringBoot 默認會從 Resources 目錄下加載 application.propertiesapplication.yml(application.yaml)文件

其中,application.properties文件是鍵值對類型的文件,具體可參考
除了properties文件外,SpringBoot 還可以使用 yml 文件進行配置,下面對 yml 文件進行講解。

雖然 properties 文件比較常見,但是相對於 properties 而言,yaml 更加簡潔明瞭,而且使用的場景也更多,很多開源項目都是使用 yaml 進行配置(例如 Hexo)。除了簡潔,yaml 還有另外一個特點,就是 yaml 中的數據是有序的,properties 中的數據是無序的,在一些需要路徑匹配的配置中,順序就顯得尤爲重要,此時我們一般採用 yaml。

2. application.yml配置文件

(1)yml配置文件簡介
YML 文件格式是 YAML (YAML Aint Markup Language) 編寫的文件格式,YAML 是一種直觀的能夠被電腦識別的的數據數據序列化格式,並且容易被人類閱讀,容易和腳本語言交互的,可以被支持 YAML 庫的不同的編程語言程序導入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。

YML文件是以數據爲核心的,比傳統的xml方式更加簡潔。

YML文件的擴展名可以使用.yml或者.yaml

(2)yml 配置文件的語法

  • 配置普通數據
    語法:key: value
    注意:value之前有一個空格
name: yolo
  • 配置對象數據
    注意:下面 key1前面的空格個數不限定,在yml語法中,相同縮進代表同一個級別
語法:
	key:
		key1: value1
		key2: value2
	或者:key: {key1: value1,key2: value2}
例如:
person:
  name: yolo
  age: 19
  addr: shanghai
或者:person: {name: yolo,age: 18,addr: beijing}
  • 配置數據、集合(普通字符串)
city:
  - beijing
  - tianjin
  - chongqing
  - shanghai

或者 city: [beijing,tianjin,chongqing,shanghai]
  • 配置數據、集合(對象數據)
student:
  - name: tom1
    age: 18
    addr: beijing
  - name: tom2
    age: 17
    addr: tianjin

#student: [{name: tom1,age: 18,addr: beijing},{name: tom2,age: 17,addr: tianjin}]
  • Map 配置
map:
  key1: value1
  key2: value2

3. SpringBoot配置信息的查詢

SpringBoot 的配置文件,主要的目的就是對配置信息進行修改的,但在配置時的 key 可以查閱SpringBoot的官方文檔:文檔URL

常用的配置信息:

# QUARTZ SCHEDULER (QuartzProperties)
spring.quartz.jdbc.initialize-schema=embedded # Database schema initialization mode.
spring.quartz.jdbc.schema=classpath:org/quartz/impl/jdbcjobstore/tables_@@platform@@.sql # Path to the SQL file to use to initialize the database schema.
spring.quartz.job-store-type=memory # Quartz job store type.
spring.quartz.properties.*= # Additional Quartz Scheduler properties.

# ----------------------------------------
# WEB PROPERTIES
# ----------------------------------------
# EMBEDDED SERVER CONFIGURATION (ServerProperties)
server.port=8080 # Server HTTP port.
server.servlet.context-path= # Context path of the application.
server.servlet.path=/ # Path of the main dispatcher servlet.

# HTTP encoding (HttpEncodingProperties)
spring.http.encoding.charset=UTF-8 # Charset of HTTP requests and responses. Added to the "Content-Type" header if not set explicitly.

# SPRING MVC (WebMvcProperties)
spring.mvc.servlet.load-on-startup=-1 # Load on startup priority of the dispatcher
servlet.
spring.mvc.static-path-pattern=/** # Path pattern used for static resources.
spring.mvc.view.prefix= # Spring MVC view prefix.
spring.mvc.view.suffix= # Spring MVC view suffix.

# DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
spring.datasource.driver-class-name= # Fully qualified name of the JDBC driver. Autodetected based on the URL by default.
spring.datasource.password= # Login password of the database.
spring.datasource.url= # JDBC URL of the database.
spring.datasource.username= # Login username of the database.

# JEST (Elasticsearch HTTP client) (JestProperties)
spring.elasticsearch.jest.password= # Login password.
spring.elasticsearch.jest.proxy.host= # Proxy host the HTTP client should use.
spring.elasticsearch.jest.proxy.port= # Proxy port the HTTP client should use.
spring.elasticsearch.jest.read-timeout=3s # Read timeout.
spring.elasticsearch.jest.username= # Login username.

我們可以通過配置application.poperties 或者 application.yml 來修改SpringBoot的默認配置

二、配置文件與配置類的屬性映射方式

1. 使用註解@Value映射

在這裏插入圖片描述

package yolo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Value("${name}")
    private String username;
    @Value("${person.age}")
    private Integer age;

    @RequestMapping("/person")
    public String getPerson() {
        return "username = " + username + " age = " + age;
    }
}

在這裏插入圖片描述

2. 使用註解@ConfigurationProperties映射

通過註解@ConfigurationProperties(prefix="配置文件中的key的前綴")可以將配置文件中的配置自動與實體進行映射

這裏使用@ConfigurationProperties("person"),注意對於person 對應application.ym 中的 person對象, 同時屬性需要有對應的 get 和 set 方法:
在這裏插入圖片描述

package yolo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@ConfigurationProperties("person")
public class UserController {
    private String name;
    private Integer age;
    @RequestMapping("/person")
    public String getPerson() {
        return "username = " + name + " age = " + age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}

IDEA 出現:點擊 Open Documentation
在這裏插入圖片描述
將這個依賴添加到 pom 文件中即可:此時再使用 ym 文件中時會給一定的提示,也就是在使用類和 ym 文件建立了一個聯繫。

 <!--@ConfiguaritionProperties的執行器的配置-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章