欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?Boot?配置文件之類型、加載順序與最佳實踐記錄

 更新時間:2025年04月02日 14:32:41   作者:權(quán)^  
Spring?Boot?的配置文件是靈活且強大的工具,通過合理的配置管理,可以讓應(yīng)用開發(fā)和部署更加高效,無論是簡單的屬性配置,還是復(fù)雜的多環(huán)境管理,Spring?Boot都提供了便捷的解決方案,本文介紹Spring?Boot?配置文件:類型、加載順序與最佳實踐,感興趣的朋友一起看看吧

Spring Boot 配置文件詳解

Spring Boot 是一個基于 Java 的快速開發(fā)框架,它通過自動化配置和簡化設(shè)置,使開發(fā)者能夠更專注于業(yè)務(wù)邏輯的實現(xiàn)。配置文件是 Spring Boot 應(yīng)用配置的核心,通過它我們可以輕松地調(diào)整應(yīng)用的運行環(huán)境、功能參數(shù)等。本文將詳細介紹 Spring Boot 配置文件的使用方法、常見場景及注意事項。

很多項目或者框架的配置信息也放在配置文件中, 比如:
• 項目的啟動端口
• 數(shù)據(jù)庫的連接信息(包含用戶名和密碼的設(shè)置)
• 第三方系統(tǒng)的調(diào)用密鑰等信息
• 用于發(fā)現(xiàn)和定位問題的普通日志和異常日志等.

一、Spring Boot 配置文件類型

Spring Boot 支持兩種主要的配置文件類型:

1.1 application.properties(屬性文件)

properties 配置?件是最早期的配置?件格式,也是創(chuàng)建 SpringBoot 項目默認的配置文件。

  • 以鍵值對的形式存儲配置信息,簡單易讀。
  • 適合小型項目或者簡單的配置場景。

properties 是以鍵值的形式配置的,key 和 value 之間是以"="連接的。
示例:
在之前的文章當中,啟動時用的端口號是8080,可以通過配置文件來更改端口號:

# 配置項目端?號
server.port=9090

1.2 application.yml(YAML文件)

  • 使用 YAML 格式,結(jié)構(gòu)清晰,適合復(fù)雜的配置場景。
  • 支持層級結(jié)構(gòu)和多環(huán)境配置,功能更強大。

示例:

# 配置項目端?號
server:
  port: 8080

二、application.properties 和 application.yml 的優(yōu)缺點分析

1. application.properties

1.1 優(yōu)點

  • 簡單易學: 基于鍵值對的形式,語法簡單,易于理解和使用,適合新手快速上手。
  • 輕量級:文件體積小,適合小型項目或簡單的配置需求。
  • 無需額外依賴:Spring Boot 默認支持.properties 文件,無需引入其他依賴。
  • 錯誤提示:-在IDE中,.properties 文件的錯誤提示相對友好,開發(fā)者可以快速定位問題。
  • 歷史傳統(tǒng):具有較長的歷史,許多開發(fā)者已經(jīng)熟悉其語法和使用方式。

1.2 缺點

  • 層級結(jié)構(gòu)不足:無法直接通過縮進來表示層級關(guān)系,復(fù)雜配置時顯得冗雜。 需要通過“.”來分隔層級,容易導致配置項過長。
  • 不支持復(fù)雜數(shù)據(jù)類型:無法直接配置集合、列表等復(fù)雜數(shù)據(jù)類型。如果需要配置集合,需要通過逗號分隔,語法相對繁瑣。
  • 可讀性差:對于復(fù)雜配置,.properties 文件的可讀性較差,難以快速理解配置結(jié)構(gòu)。
  • 配置項冗長:對于需要層次結(jié)構(gòu)的配置,.properties 文件會顯得過于冗長。

2. application.yml

2.1 優(yōu)點

  • 層次結(jié)構(gòu)清晰:使用 YAML 格式,通過縮進表示層級關(guān)系,配置文件結(jié)構(gòu)清晰,易于理解。適合復(fù)雜配置場景,能夠直觀地表達配置之間的關(guān)系。
  • 支持復(fù)雜數(shù)據(jù)類型:支持列表、字典等復(fù)雜數(shù)據(jù)類型,配置更加靈活。可以直接在配置文件中定義數(shù)組、映射等結(jié)構(gòu)。
  • 可讀性強:對于復(fù)雜的配置場景,YAML 文件的可讀性遠超 .properties 文件。通過層次結(jié)構(gòu),可以快速定位配置項。
  • 多環(huán)境配置便捷: YAML 文件支持多環(huán)境配置,通過不同的文件后綴(如 application-dev.yml)輕松實現(xiàn)環(huán)境隔離。
  • 與 Docker.deltaTime 兼容:YAML 格式與 Docker 的配置文件格式類似,方便在微服務(wù)場景下使用。

2.2 缺點

  • 語法要求嚴格:YAML 文件的縮進、空格等格式要求非常嚴格,稍有不慎會導致配置加載失敗。對于新手來說,需要花時間學習 YAML 的語法規(guī)則。
  • 對大型配置文件的性能影響:由于 YAML 文件的復(fù)雜性,加載和解析大型配置文件可能會帶來一定的性能開銷。
  • 依賴snakeyaml庫:Spring Boot 的 YAML 配置文件依賴于 snakeyaml 庫,需要額外引入依賴。
  • 敏感信息處理復(fù)雜:在 YAML 文件中處理敏感信息(如密碼)需要額外的配置和加密,操作相對復(fù)雜。

3. 對比分析

特性application.propertiesapplication.yml
可讀性簡單配置可讀性高,但復(fù)雜配置可讀性較差無論簡單還是復(fù)雜配置,層次結(jié)構(gòu)清晰,可讀性強
層次結(jié)構(gòu)無法通過格式表示層次結(jié)構(gòu),需通過“.”分隔支持層次結(jié)構(gòu),通過縮進表示
復(fù)雜數(shù)據(jù)類型不支持直接配置復(fù)雜數(shù)據(jù)類型支持列表、字典等復(fù)雜數(shù)據(jù)類型
語法復(fù)雜性語法簡單,無需學習額外的格式語法較復(fù)雜,需要學習 YAML 的基礎(chǔ)知識
性能解析速度快,性能開銷小對于大型配置文件,解析速度較慢,性能開銷大
多環(huán)境配置支持多環(huán)境配置,但實現(xiàn)相對繁瑣多環(huán)境配置實現(xiàn)簡單,通過文件后綴即可輕松切換
開發(fā)成本開發(fā)成本低,適合簡單項目開發(fā)成本稍高,但在復(fù)雜項目中更高效

4. 使用建議

  • 選擇 application.properties 的場景:
    • 項目配置較為簡單,不需要復(fù)雜的層次結(jié)構(gòu)。
    • 開發(fā)團隊對 YAML 格式不熟悉,希望快速上手。
    • 需要快速Prototype(原型開發(fā)),不希望花費時間在配置文件格式上。

選擇 application.yml 的場景:

  • 項目配置復(fù)雜,需要清晰的層次結(jié)構(gòu)。
  • 需要配置復(fù)雜數(shù)據(jù)類型(如列表、字典等)。
  • 項目需要多環(huán)境配置,希望通過簡單的方式實現(xiàn)環(huán)境切換。
  • 項目團隊熟悉 YAML 格式,能夠快速上手。

5. 示例對比

5.1 application.properties 示例

server.port=8080
server.servlet.context-path=/myapp
spring.datasource.url=jdbc:mysql://localhost:3306/testdb
spring.datasource.username=root
spring.datasource.password=123456
myconfig.appName=My Spring Boot App
myconfig.version=1.0.0

5.2 application.yml 示例

server:
  port: 8080
  servlet:
    context-path: /myapp
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/testdb
    username: root
    password: 123456
myconfig:
  appName: My Spring Boot App
  version: 1.0.0

從上述示例可以看出,application.yml 的配置文件結(jié)構(gòu)更清晰,層次更分明,易于理解和維護。

三、yml配置和properties配置的讀取

如果在項目中,想要主動的讀取配置文件中的內(nèi)容,可以使用 @Value 注解來實現(xiàn)。@Value 注解使用" ${} "的格式讀取

3.1properties配置的讀取

properties配置文件:

#端口號
server.port=9090
#項目名稱
spring.application.name=spring-boot-demo
#讀取這個配置文件
Mylove.key=you
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("Mylove")
public class MyController {
    @Value("${Mylove.key}")
    private String key;
    @RequestMapping("getMylove")
    public String ggetMylove() {
        return "讀取到配置文件的值:"+key;
    }
}
@SpringBootApplication
public class SpringBootDemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(SpringBootDemoApplication.class, args);
	}
}

啟動項目:用瀏覽器打開 http:127.0.0.1:9090/Mylove/Mylove :

可以看到讀取到了配置文件的值。

3.2yml配置的讀取

yml配置文件:

#端口號
server:
  port=9090
#項目名稱
spring:
  application:
     name: spring-boot-demo
#配置項目文件
Mylove:
  key1: you1

同理如上:
啟動項目:

可以看到讀取yml配置文件的值成功了。

再舉幾個讀取yml配置的例子:
配置對象

#端口號
server:
  port=9090
#項目名稱
spring:
  application:
     name: spring-boot-demo
#配置對象
student:
  name: 張三
    age: 18

這個時候就不能用@Value來讀取配置中的對象了,此時要使?另?個注解@ConfigurationProperties 來讀取,具體實現(xiàn)如下:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
    private String name;
    private int age;
}
import com.slivqers.model.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("yml")
public class SpringBootController {
    @Autowired
    private Student student;
    @RequestMapping("test")
    private String GetSpringBoot(){
        return student.toString();
    }
}

啟動:

@SpringBootApplication
public class SpringBootDemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(SpringBootDemoApplication.class, args);
	}
}

訪問http:127.0.0.1:9090/yml/test :

配置集合

#端口號
server:
  port=9090
#項目名稱
spring:
  application:
     name: spring-boot-demo
#配置集合
types:
  name:
    - mysql
    - sqlserver
    - db2

補充代碼進行觀察測試:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@ConfigurationProperties(prefix = "types")
@Data
public class Lists{
    private List<String> name ;
}
import com.slivqers.model.Lists;
import com.slivqers.model.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("yml")
public class SpringBootController {
    @Autowired
    private Lists list;
    @RequestMapping("test")
    private String GetSpringBoot(){
        return list.toString();
    }
}

啟動:

@SpringBootApplication
public class SpringBootDemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(SpringBootDemoApplication.class, args);
	}
}

訪問:http://127.0.0.1:9090/yml/test

四、 配置文件的加載順序

Spring Boot 配置文件的加載順序如下:

當前目錄下的 config 目錄:優(yōu)先級最高。
當前目錄下的配置文件:如 application.ymlapplication.properties
類路徑下的 config 包:用于包內(nèi)的配置。
類路徑下的配置文件:如 application.ymlapplication.properties。
通過合理規(guī)劃配置文件的位置,可以實現(xiàn)環(huán)境隔離和配置管理。

提出問題
yml配置文件properties配置文件同時存在,那么哪個優(yōu)先級在前面呢?

我們用個簡單的例子進行測試:

yml配置文件

#端口號
server:
  port=9090

properties配置文件

#端口號
server.port=8080

我們啟動項目看用的是哪個端口號:

可以看到用的是8080這個端口號,可見當他們兩個這個配置文件同時存在時候,properties配置文件的優(yōu)先級更加高。

五、 多環(huán)境配置

在實際開發(fā)中,我們通常需要針對不同環(huán)境(如開發(fā)、測試、生產(chǎn))配置不同的參數(shù)。Spring Boot 支持通過配置文件后綴來實現(xiàn)多環(huán)境配置。

5.1 配置文件命名規(guī)則

配置文件可以通過添加環(huán)境名稱作為后綴,創(chuàng)建多個環(huán)境配置文件:

  • application.yml:默認配置文件。
  • application-dev.yml:開發(fā)環(huán)境配置。
  • application-test.yml:測試環(huán)境配置。
  • application-prod.yml:生產(chǎn)環(huán)境配置。

5.2 激活環(huán)境

可以通過以下方式激活特定環(huán)境:

1. 命令行參數(shù)

在啟動應(yīng)用時,通過 --spring.profiles.active 參數(shù)指定環(huán)境:

java -jar --spring.profiles.active=dev myapp.jar

2. 配置文件激活

application.yml 文件中直接配置激活環(huán)境:

spring:
  profiles:
    active: dev

六、 常用配置示例

以下是一些常見的配置場景示例:

6.1 服務(wù)器配置

server:
  port: 8080
  servlet:
    context-path: /myapp

6.2 數(shù)據(jù)庫配置

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/testdb
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

6.3 日志配置

logging:
  level: INFO
  file:
    name: logs/myapp.log

6.4 自定義配置屬性

application.yml 中添加自定義屬性:

myconfig:
  appName: My Spring Boot App
  version: 1.0.0

在代碼中使用自定義屬性:

@Configuration
@Component
public class MyConfig {
    @Value("${myconfig.appName}")
    private String appName;
    public String getAppName() {
        return appName;
    }
}

七、配置文件的注意事項

  • 配置文件的位置:盡量避免將配置文件放在多個目錄中,以免引發(fā)配置沖突。
  • 環(huán)境隔離:不同環(huán)境的配置文件要明確區(qū)分,避免生產(chǎn)環(huán)境配置錯誤。
  • 敏感信息:不要直接在配置文件中硬編碼敏感信息(如密碼),建議使用外部配置或加密方式。
  • 文件格式:YAML 文件的縮進和格式尤為重要,格式錯誤可能導致應(yīng)用啟動失敗。

八、配置文件的加載位置

除了默認的配置文件外,Spring Boot 還支持從以下位置加載配置文件:

外部文件目錄:通過 --spring.config.location 參數(shù)指定。

java -jar --spring.config.location=/path/to/config/ myapp.jar

內(nèi)部類路徑:將配置文件放在 src/main/resources 目錄下。

外部配置中心:結(jié)合 Spring Cloud Config 使用外部配置中心。

九、高級主題

9.1 配置文件的優(yōu)先級

配置文件的加載順序決定了配置的優(yōu)先級,后加載的配置會覆蓋前面的配置。

加載順序配置文件路徑
1file:./config/
2file:./
3classpath:config/
4classpath:

9.2 動態(tài)更新配置

Spring Boot 提供了.DynamicPropertySource功能,可以實現(xiàn)配置的熱更新。

9.3 使用隨機端口

通過配置 server.port=0 可以讓服務(wù)器隨機分配端口。

十、 總結(jié)

Spring Boot 的配置文件是靈活且強大的工具,通過合理的配置管理,可以讓應(yīng)用開發(fā)和部署更加高效。無論是簡單的屬性配置,還是復(fù)雜的多環(huán)境管理,Spring Boot 都提供了便捷的解決方案。在后續(xù)的學習中,可以深入探索 Spring Boot 的其他配置高級功能,如動態(tài)配置更新、配置文件加密等。

希望本文對你理解Spring Boot 配置文件有所幫助!如果有更多問題,歡迎留言討論。

到此這篇關(guān)于Spring Boot 配置文件之類型、加載順序與最佳實踐記錄的文章就介紹到這了,更多相關(guān)Spring Boot 類型、加載順序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IDEA新建bootstrap.yml文件不顯示葉子圖標的問題

    IDEA新建bootstrap.yml文件不顯示葉子圖標的問題

    這篇文章主要介紹了IDEA新建bootstrap.yml文件不顯示葉子圖標的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 解析web.xml中在Servlet中獲取context-param和init-param內(nèi)的參數(shù)

    解析web.xml中在Servlet中獲取context-param和init-param內(nèi)的參數(shù)

    本篇文章是對web.xml中在Servlet中獲取context-param和init-param內(nèi)的參數(shù)進行了詳細的分析介紹,需要的朋友參考下
    2013-07-07
  • 詳解前后端分離之Java后端

    詳解前后端分離之Java后端

    這篇文章主要介紹了詳解前后端分離之Java后端,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • RocketMQ的消費者類型與最佳實踐詳解

    RocketMQ的消費者類型與最佳實踐詳解

    這篇文章主要介紹了RocketMQ的消費者類型與最佳實踐詳解,在?RocketMQ?5.0?中,更加強調(diào)了客戶端類型的概念,尤其是消費者類型,為了滿足多樣的?RocketMQ?中一共有三種不同的消費者類型,分別是?PushConsumer、SimpleConsumer?和?PullConsumer,需要的朋友可以參考下
    2023-10-10
  • springMVC如何將controller中Model數(shù)據(jù)傳遞到j(luò)sp頁面

    springMVC如何將controller中Model數(shù)據(jù)傳遞到j(luò)sp頁面

    本篇文章主要介紹了springMVC如何將controller中Model數(shù)據(jù)傳遞到j(luò)sp頁面,具有一定的參考價值,有興趣的可以了解一下
    2017-07-07
  • java設(shè)計模式學習之簡單工廠模式

    java設(shè)計模式學習之簡單工廠模式

    這篇文章主要為大家詳細介紹了java設(shè)計模式學習之簡單工廠模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • JAVA8 lambda表達式權(quán)威教程

    JAVA8 lambda表達式權(quán)威教程

    本文主要給大家講解Java8中最重要的一個特征之一lambda表達式,本文通過實例圖文解說給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友跟隨小編一起學習下吧
    2021-05-05
  • 解決Springboot獲取不到nacos配置中心的配置問題

    解決Springboot獲取不到nacos配置中心的配置問題

    由于項目使用的nacos老版本,存在風險bug, 需要將nacos升級至2.2.1及以上版本,版本升級完畢之后 啟動項目發(fā)現(xiàn)項目開始報錯,所以本文記錄一下Springboot獲取不到nacos配置中心的配置問題,文中有詳細的解決方法,需要的朋友可以參考下
    2023-09-09
  • SpringBoot啟動原理深入解析

    SpringBoot啟動原理深入解析

    我們開發(fā)任何一個Spring Boot項目都會用到啟動類,下面這篇文章主要給大家介紹了關(guān)于SpringBoot啟動原理解析的相關(guān)資料,文中通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • Java實現(xiàn)多級表頭和復(fù)雜表頭的導出功能

    Java實現(xiàn)多級表頭和復(fù)雜表頭的導出功能

    這篇文章主要為大家詳細介紹了Java實現(xiàn)多級表頭和復(fù)雜表頭的導出功能的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03

最新評論