最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot?配置文件核心用法(Properties?&?YAML)詳解

 更新時(shí)間:2026年03月20日 09:50:07   作者:Han.miracle  
這篇文章給大家介紹了SpringBoot?配置文件核心用法(Properties?&?YAML)詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

SpringBoot 定義了規(guī)范的配置文件格式,用于集成其他框架,并集中管理項(xiàng)目各類配置信息,典型場景包括:

  • 項(xiàng)目啟動(dòng)端口:自定義服務(wù)監(jiān)聽端口
  • 數(shù)據(jù)庫連接信息:包含用戶名、密碼等
  • 第三方系統(tǒng)調(diào)用密鑰
  • 日志配置:普通日志、異常日志,用于問題定位與排查

1.關(guān)鍵配置場景說明

  • 項(xiàng)目啟動(dòng)端口
    • SpringBoot 內(nèi)置 Tomcat 服務(wù)器,默認(rèn)端口號為 8080
    • 若 8080 端口被其他程序占用,需通過配置文件自定義端口號
  • 數(shù)據(jù)庫連接信息
    • 持久層框架(如 MyBatis、JPA 等)是對 JDBC 的深層封裝
    • 不同應(yīng)用訪問的數(shù)據(jù)庫不同,需通過配置文件自定義數(shù)據(jù)庫連接參數(shù)

2.配置文件快速入門

  • SpringBoot 項(xiàng)目創(chuàng)建時(shí),會自動(dòng)生成配置文件
  • 可通過修改配置文件,更改服務(wù)端口號(解決 8080 端口被占用問題)

修改 application.properties ?件

server.port=9090

顯?Tomcat啟動(dòng)端?號為9090

訪問程序:http://127.0.0.1:9090/login.html

此時(shí):http://127.0.0.1:808/login.html 就不能再訪問了

3.配置文件的格式

Spring Boot 配置文件有以下三種:

  • application.properties
  • application.yml
  • application.yaml

注意:

properties 優(yōu)先級比yml. yaml的優(yōu)先級要高一些

ymlyaml 的簡寫,實(shí)際開發(fā)中出現(xiàn)頻率最高。yamlyml 的使用方式一樣,課堂中只講 yml 文件的使用。

當(dāng)應(yīng)用程序啟動(dòng)時(shí),Spring Boot 會自動(dòng)從 classpath 路徑找到并加載 application.propertiesapplication.yaml 或者 application.yml 文件。

也可以通過 spring.config.name 指定文件路徑和名稱,參考 https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config.files

如下圖所示:

3.1配置文件包裝類比

類似商品包裝,.properties老款包裝(Spring Boot 項(xiàng)目默認(rèn)格式),.yml新版包裝,實(shí)際開發(fā)中更推薦使用。

3.2特殊說明

  1. 共存與優(yōu)先級:理論上 .properties.yml 可共存,啟動(dòng)時(shí)都會加載;若配置沖突,.properties 優(yōu)先級更高。
  2. 實(shí)踐建議:實(shí)際業(yè)務(wù)中建議統(tǒng)一使用一種格式,便于維護(hù)、降低故障概率。

注意事項(xiàng):

重啟idea ,會出現(xiàn)有一點(diǎn)小問題

我們重啟idea我們會發(fā)現(xiàn),他亂碼了,遇到這種情況,我們沒有恢復(fù)的辦法

解決辦法:

1.

2.

3.這個(gè)只是修改了這個(gè)的配置,我們需要修改整個(gè)的這個(gè)配置文件

4.修改本地的配置

4.properties 配置文件說明

4.1 基本語法

  • 格式:鍵值對key=value 形式
  • 注釋:使用 # 添加注釋
  • 示例:
# 配置項(xiàng)目端口號
server.port=8080
# 配置數(shù)據(jù)庫連接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

4.2 讀取配置文件

  • 方式:使用 @Value 注解,以 ${key} 格式讀取
  • 配置示例:
    mykey.key1 = bite
  • 代碼示例:
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    @RestController
    public class PropertiesController {
        @Value("${mykey.key1}")
        private String key1;
        @RequestMapping("/key")
        public String key(){
            return "讀取到值:"+key1;
        }
    }

補(bǔ)充說明

  • @Value 注解可直接注入配置文件中的值到類成員變量。
  • 訪問 /key 接口時(shí),會返回配置文件中 mykey.key1 對應(yīng)的值(如 讀取到值:bite)。

@PostConstruct 核心說明

1. 基本定義

@PostConstruct 是 Java EE 中的注解(Spring 也完全支持),作用是:在 Spring 容器創(chuàng)建完 Bean 實(shí)例、完成依賴注入后,自動(dòng)執(zhí)行標(biāo)注了這個(gè)注解的方法。

簡單說:Bean 先被創(chuàng)建 → 依賴注入(比如 @Autowired 注入的對象)→ @PostConstruct 方法執(zhí)行。

  •   初始化數(shù)據(jù)(比如加載配置、初始化緩存、連接第三方服務(wù));
  • 執(zhí)行 Bean 創(chuàng)建后的前置操作(依賴注入完成后才能執(zhí)行,避免空指針)。

二、完整可運(yùn)行示例

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
// 普通的Spring Bean
@Component
public class UserService {
    // 依賴注入的對象
    @Autowired
    private ConfigService configService;
    // 空參、無返回值的初始化方法
    @PostConstruct
    public void init() {
        // 此時(shí)configService已經(jīng)完成注入,可安全使用
        String config = configService.getConfig();
        System.out.println("Bean初始化完成,加載配置:" + config);
        // 還可以做緩存初始化、數(shù)據(jù)預(yù)加載等操作
    }
}
// 依賴的ConfigService(示例)
@Component
class ConfigService {
    public String getConfig() {
        return "數(shù)據(jù)庫連接配置:jdbc:mysql://localhost:3306/test";
    }
}

三、關(guān)鍵注意點(diǎn)

  1. 標(biāo)注的方法必須是:無參數(shù)、無返回值(void)、非靜態(tài);
  2. 執(zhí)行時(shí)機(jī):晚于 @Autowired 依賴注入,早于 Bean 被業(yè)務(wù)代碼使用;
  3. 替代方案:Spring 的 InitializingBean 接口(但 @PostConstruct 更簡潔)

4.3 properties 缺點(diǎn)分析

properties 配置是以key-value的形式配置的,如下圖所?:

從上述配置key看出,properties配置?件中會有很多的冗余的信息,?如這些:

想要解決這個(gè)問題,就可以使?yml配置?件的格式化了.

5. yml 配置文件說明

yml 是 YAML 的縮寫,它的全稱是 Yet Another Markup Language,翻譯成中文就是 “另一種標(biāo)記語言”。我們先來學(xué)習(xí) yml 的語法。

5.1 yml 基本語法

yml 是樹形結(jié)構(gòu)的配置文件,它的基礎(chǔ)語法是 "key: value"。

  • key 和 value 之間使用英文冒號加空格的方式組成,空格不可省略。
  • 基礎(chǔ)語法如下:

1. 基礎(chǔ)鍵值對(核心語法)

# 正確寫法(冒號后必須帶空格)
server:
  port: 8080
  host: localhost
# 錯(cuò)誤寫法(無空格,配置無法解析)
# server:port:8080

2. 數(shù)據(jù)類型

# 字符串(默認(rèn)無需引號,特殊字符需加引號)
name: 張三
nickname: "zhangsan:001"  # 包含特殊符號時(shí)加雙引號
remark: 'hello\nworld'     # 單引號會轉(zhuǎn)義特殊字符,\n 不會換行
# 數(shù)字
age: 20
score: 98.5
# 布爾值
enabled: true
disabled: false
# 空值
empty: null  # 或 ~
# 日期(ISO 8601 格式)
birthday: 2024-03-18

3. 集合 / 數(shù)組(兩種寫法)

# 寫法1:短橫線 + 空格(推薦,層級清晰)
user:
  hobbies:
    - 籃球
    - 游泳
    - 編程
# 寫法2:中括號簡寫(單行)
user:
  tags: [Java, SpringBoot, MySQL]

4. 對象 / 嵌套配置

# 多層嵌套(SpringBoot 常用)
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: 123456
  redis:
    host: 127.0.0.1
    port: 6379
    timeout: 5000ms

5. 注釋規(guī)則

# 單行注釋(僅支持單行,用 # 開頭)
server:
  port: 8080  # 端口配置(行內(nèi)注釋也需用 #)
# 多行注釋需每行加 #
# 開發(fā)環(huán)境端口
# 生產(chǎn)環(huán)境可改為 80

使用 yml 連接數(shù)據(jù)庫yml

使用示例:

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/dbname?characterEncoding=utf8&useSSL=false
    username: root
    password: root

yml 和 properties 連接數(shù)據(jù)庫的配置對比:

5.2 yml 使用進(jìn)階

5.2.1 yml 配置不同數(shù)據(jù)類型及 null

# 字符串
string.value: Hello
# 布爾值,true或false
boolean.value: true
boolean.value1: false
# 整數(shù)
int.value: 10
# 浮點(diǎn)數(shù)
float.value: 3.14159
# Null,~代表null
null.value: ~
# "" 空字符串
#,直接后面什么都不加就可以了,但這種方式不直觀,更多的表示是使用引號括起來
empty.value: ''

5.2.1.1 yml 配置讀取

yml 讀取配置的方式和 properties 相同,使用@Value注解即可,實(shí)現(xiàn)代碼如下:

yml 配置:

string:
  hello: bite

Java 代碼:

@RestController
public class ReadYml {
    @Value("${string.hello}")
    private String hello;
    @RequestMapping("/ymlKey")
    public String key(){
        return "讀取到值:"+hello;
    }
}

訪問地址:http://127.0.0.1:8080/ymlKey

運(yùn)行結(jié)果:(頁面顯示:讀取到值:bite)

5.2.1.2 注意事項(xiàng):value 值加單雙引號

字符串默認(rèn)不用加上單引號或者雙引號,如果加英文的單雙引號可以表示特殊的含義。

嘗試在 application.yml 中配置如下信息:

string:
  str1: Hello \n Spring Boot.
  str2: 'Hello \n Spring Boot.'
  str3: "Hello \n Spring Boot."

讀取程序?qū)崿F(xiàn)代碼如下:

@RestController
public class ReadYml {
    @Value("${string.str1}")
    private String str1;
    @Value("${string.str2}")
    private String str2;
    @Value("${string.str3}")
    private String str3;
    @RequestMapping("/yml")
    public String readYml(){
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
        return "yml";
    }
}

以上程序的執(zhí)行結(jié)果如下:

Hello \n Spring Boot.
Hello \n Spring Boot.
Hello
 Spring Boot.

從上述結(jié)果可以看出:

  • 字符串默認(rèn)不用加上單引號或者雙引號。
  • 單引號會轉(zhuǎn)義特殊字符,使其失去特殊功能,始終是一個(gè)普通的字符串。
  • 雙引號不會轉(zhuǎn)義字符串里面的特殊字符,特殊字符會表示本身的含義。

此處的轉(zhuǎn)義理解起來會有些拗口,\n 本意表示的是換行:

  • 使用單引號會轉(zhuǎn)義,\n 不再表示換行,而是表示一個(gè)普通的字符串。
  • 使用雙引號不會轉(zhuǎn)義,\n 表示的是它本身的含義,就是換行。

JavaEE 的學(xué)習(xí)重在理解和使用,不糾結(jié)概念和描述

想要快速賦值:value 

5.2.2 配置對象

我們還可以在 yml 中配置對象,如下配置:

student:
  id: 1
  name: Java
  age: 18

或者是使用行內(nèi)寫法(與上面的寫法作用一致):

student: {id: 1,name: Java,age: 18}

這個(gè)時(shí)候就不能用 @Value 來讀取配置中的對象了,此時(shí)要使用另一個(gè)注解 @ConfigurationProperties 來讀取,具體實(shí)現(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 int id;
    private String name;
    private int age;
}

調(diào)用類的實(shí)現(xiàn)如下:

@RestController
public class StudentController {
    @Autowired
    private Student student;
    @RequestMapping("/readStudent")
    public String readStudent(){
        return student.toString();
    }
}

訪問地址:http://127.0.0.1:8080/readStudent

5.2.3 配置集合

配置文件也可以配置 list 集合,如下所示:

dbtypes:
  name:
    - mysql
    - sqlserver
    - db2

集合的讀取和對象一樣,也是使用 @ConfigurationProperties 來讀取的,具體實(shí)現(xiàn)如下:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
    private List<String> name;
}

訪問集合的實(shí)現(xiàn)如下:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ReadYml2 {
    @Autowired
    private ListConfig listConfig;
    @RequestMapping("/readList")
    public String readList() {
        return listConfig.toString();
    }
}

5.2.4 配置 Map

配置文件也可以配置 map,如下所示:

maptypes:
  map:
    k1: kk1
    k2: kk2
    k3: kk3

或者是使用行內(nèi)寫法(與上面的寫法作用一致):

maptypes: {map: {k1: kk1,k2: kk2, k3: kk3}}

Map 的讀取和對象一樣,也是使用 @ConfigurationProperties 來讀取的,具體實(shí)現(xiàn)如下:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.HashMap;
@Component
@ConfigurationProperties("maptypes")
@Data
public class MapConfig {
    private HashMap<String,String> map;
}

打印類的實(shí)現(xiàn)

@RestController
public class ReadYml2 {
    @Autowired
    private MapConfig mapConfig;
    @RequestMapping("/readMap")
    public String readStudent() {
        return mapConfig.toString();
    }
}

5.3 yml 優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  1. 可讀性高,寫法簡單,易于理解
  2. 支持更多的數(shù)據(jù)類型,可以簡單表達(dá)對象、數(shù)組、List、Map 等數(shù)據(jù)形態(tài)
  3. 支持更多的編程語言,不止是 Java 中可以使用,在 Golang、Python、Ruby、JavaScript 中也可以使用

缺點(diǎn)

不適合寫復(fù)雜的配置文件

比如 properties 格式如下:

keycloak.realm = demo
keycloak.resource = fm-cache-cloud
keycloak.credentials.secret = d4589683-0ce7-4982-bcd3
keycloak.security[0].authRoles[0] = user
keycloak.security[0].collections[0].name = ssologinurl
keycloak.security[0].collections[0].patterns[0] = /login/*

轉(zhuǎn)換為 yml:

keycloak:
  realm: demo
  resource: fm-cache-cloud
  credentials:
    secret: d4589683-0ce7-4982-bcd3
  security:
    - authRoles:
        - user
      collections:
        - name: ssologinurl
          patterns:
            - /login/*

轉(zhuǎn)換的過程也比較花費(fèi)精力,如果配置更復(fù)雜一點(diǎn),可讀性會更差,代碼也會更難寫

對格式有較強(qiáng)的要求(一個(gè)空格可能會引起一場血案)

到此這篇關(guān)于SpringBoot 配置文件核心用法(Properties &amp; YAML)詳解的文章就介紹到這了,更多相關(guān)SpringBoot 配置文件用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot初始化項(xiàng)目并完成登入注冊的全過程

    Springboot初始化項(xiàng)目并完成登入注冊的全過程

    工作之余,想要學(xué)習(xí)一下SpringBoot,通過網(wǎng)絡(luò)大量教程最終成功運(yùn)行SpringBoot項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于Springboot初始化項(xiàng)目并完成登入注冊的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • idea導(dǎo)入工程時(shí)不能導(dǎo)入maven項(xiàng)目不能加入tomcatServer的原因

    idea導(dǎo)入工程時(shí)不能導(dǎo)入maven項(xiàng)目不能加入tomcatServer的原因

    這篇文章主要介紹了idea導(dǎo)入工程時(shí)不能導(dǎo)入maven項(xiàng)目不能加入tomcatServer的原因及解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • java?String到底有多長?String超出長度該如何解決

    java?String到底有多長?String超出長度該如何解決

    在Java中,由于字符串常量池的存在,String常量長度限制取決于String常量在常量池中的存儲大小,下面這篇文章主要給大家介紹了關(guān)于java?String到底有多長?String超出長度該如何解決的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • java中獲取時(shí)間戳的多種常用方式

    java中獲取時(shí)間戳的多種常用方式

    在Java中,獲取時(shí)間戳(毫秒數(shù))有多種方式,下面給大家分享幾種常用的方法來獲取時(shí)間戳,感興趣的朋友一起看看吧
    2025-05-05
  • 微信小程序訂閱消息推送實(shí)戰(zhàn)圖文教程(Java?Spring?Boot?+?Redis)

    微信小程序訂閱消息推送實(shí)戰(zhàn)圖文教程(Java?Spring?Boot?+?Redis)

    訂閱消息是微信小程序提供的一種消息推送方式,用戶可以訂閱某個(gè)公眾號或小程序的消息,當(dāng)有新消息時(shí),系統(tǒng)會自動(dòng)推送通知給用戶,這篇文章主要介紹了微信小程序訂閱消息推送(Java Spring Boot+Redis)的相關(guān)資料,需要的朋友可以參考下
    2026-04-04
  • JAVA編程不能不知道的反射用法總結(jié)

    JAVA編程不能不知道的反射用法總結(jié)

    這篇文章主要介紹了Java反射技術(shù)原理與用法,結(jié)合實(shí)例形式分析了Java反射技術(shù)的基本概念、功能、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2021-07-07
  • SpringBoot簡單整合ElasticSearch實(shí)踐

    SpringBoot簡單整合ElasticSearch實(shí)踐

    Elasticsearch支持結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)檢索,通過索引創(chuàng)建和倒排索引文檔,提高搜索效率,它基于Lucene封裝,分為索引庫、類型、文檔和字段,Spring Boot可方便操作ES,通過依賴配置、實(shí)體類映射和ElasticsearchRepository接口實(shí)現(xiàn)CRUD操作
    2025-12-12
  • Java來實(shí)現(xiàn)文本轉(zhuǎn)圖片需求示例

    Java來實(shí)現(xiàn)文本轉(zhuǎn)圖片需求示例

    本文主要介紹了Java來實(shí)現(xiàn)文本轉(zhuǎn)圖片需求示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • 淺析Spring基于注解的AOP

    淺析Spring基于注解的AOP

    Spring是一個(gè)廣泛應(yīng)用的框架,SpringAOP則是Spring提供的一個(gè)標(biāo)準(zhǔn)易用的aop框架,依托Spring的IOC容器,提供了極強(qiáng)的AOP擴(kuò)展增強(qiáng)能力,對項(xiàng)目開發(fā)提供了極大地便利
    2022-11-11
  • Java OpenCV4.0.0實(shí)現(xiàn)實(shí)時(shí)人臉識別

    Java OpenCV4.0.0實(shí)現(xiàn)實(shí)時(shí)人臉識別

    這篇文章主要為大家詳細(xì)介紹了Java OpenCV4.0.0實(shí)現(xiàn)實(shí)時(shí)人臉識別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07

最新評論

八宿县| 房产| 东平县| 秦皇岛市| 正阳县| 通辽市| 南靖县| 天台县| 和田市| 灵台县| 禹州市| 宁陵县| 洛扎县| 宾川县| 太保市| 武川县| 长海县| 开平市| 田阳县| 宝丰县| 丹寨县| 林周县| 高唐县| 潮州市| 万安县| 民乐县| 石渠县| 如东县| 从江县| 武义县| 靖西县| 长岭县| 永丰县| 余江县| 瓮安县| 榆树市| 清水河县| 桑日县| 嘉鱼县| 旺苍县| 高平市|