3、SpringBoot2之配置文件

来源:https://www.cnblogs.com/Javaer1995/archive/2023/12/20/17910266.html
-Advertisement-
Play Games

3.1、環境搭建 3.1.1、在project創建新module 3.1.2、選擇maven 3.1.3、設置module名稱和路徑 3.1.4、module初始狀態 3.1.5、引入springboot父工程 <parent> <groupId>org.springframework.boot</ ...


3.1、環境搭建

3.1.1、在project創建新module

image

3.1.2、選擇maven

image

3.1.3、設置module名稱和路徑

image

image

3.1.4、module初始狀態

image

3.1.5、引入springboot父工程

image

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.18</version>
    </parent>

3.1.6、引入啟動器依賴

image

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

3.1.7、創建啟動類

image

package online.liaojy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author liaojy
 * @date 2023/12/18 - 6:24
 */
@SpringBootApplication
public class MainApplication {

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

}

3.1.8、創建控制器

image

package online.liaojy.controller;

import org.springframework.web.bind.annotation.RestController;

/**
 * @author liaojy
 * @date 2023/12/18 - 7:04
 */
@RestController
public class TestController {

}

3.2、統一配置管理概述

  • 在 Spring Boot 工程中,實行統一的配置管理,即所有參數配置都會集中到一個固定位置和命名的文件中;

  • 配置文件的固定位置是在 src/main/resources 目錄下,該目錄是 Spring Boot 工程預設的類路徑(classpath);

  • 配置文件的命名格式為:application+尾碼+擴展名,擴展名可以是 properties 、yaml 或 yml ;

  • 如果 application.properties 和 application.yml(.yaml) 同時存在,則 properties 的優先順序更高。

    image

image

在 Spring Boot 工程的統一配置文件中,有自定義的參數項,也有固定的參數項,固定的參數項及預設值見 Spring Boot 官方文檔:
https://docs.spring.io/spring-boot/docs/2.7.18/reference/html/application-properties.html

3.3、properties配置文件

3.3.1、創建application.properties配置文件

image

# application.properties 為統一配置文件,既可以配置固定功能的參數項,也可以配置自定義的參數項

# 固定功能參數項的示例
server.port=8088
server.servlet.context-path=/application


# 自定義參數項的示例
my.name=liaojy

3.3.2、讀取配置文件中的參數值

image

在統一配置文件中的參數項的值,都可以使用@Value("${鍵}")的方式直接讀取,但一般都是讀取自定義的參數項的值

    @Value("${my.name}")
    private String name;

    @RequestMapping("/readApplication")
    public String readApplication(){
        return "Hello,"+name+"!";
    }

3.3.3、測試效果

image

3.4、yaml配置文件(瞭解)

3.4.1、yaml概述

  • YAML(YAML Ain’t Markup Language)是一種基於層次結構的數據表示方式;

  • YAML配置文件的擴展名,可以是 yaml ,也可以是 yml ;

  • YAML 配置文件中的鍵和值之間使用冒號 “ : ” 分隔,並使用縮進表示層級關係,可以減少冗餘的內容;

  • 相比起 properties 配置文件,YAML 配置文件支持複雜的數據類型,集合類型可以通過減號 “ - ” 來表示。

註意:因為 YAML 配置文件無法搜索完整的參數項名稱,且空格和縮進的格式經常被人詬病,所以本文更推薦使用 properties 配置文件

3.4.2、創建application.yml配置文件

image

# application.yml 為統一配置文件,既可以配置固定功能的參數項,也可以配置自定義的參數項

# 固定功能參數項的(properties)示例
# server.port=8088
# server.servlet.context-path=/application

# 固定功能參數項的(yml)示例
server:
  port: 8088          # 註意冒號 “ : ” 和值之間有一個空格
  servlet:
    context-path: /application


# 自定義參數項的(properties)示例,properties不支持複雜的數據類型
# my.name=liaojy

# 自定義參數項的(yml)示例
my:
  name: liaojy
  hobby:              # yml支持複雜的數據類型,,集合類型可以通過減號 “ - ” 來表示
    - book
    - music
    - movie

3.4.3、讀取配置文件中的參數值

image

讀取 YAML 配置文件中參數值的方式,和讀取 properties 配置文件中參數值的方式相同,都是使用@Value("${鍵}")的方式直接讀取;

需要註意的是,使用@Value("${鍵}")的方式,不能讀取集合類型(本例為 my.hobby )的值,
如果希望讀取集合類型的值,則需要使用 @ConfigurationProperties 註解(詳細見3.5節)

@Value("${my.name}")

3.4.4、測試效果

image

image

3.5、配置的批量註入

3.5.1、創建組件類

image

package online.liaojy.pojo;

import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @author liaojy
 * @date 2023/12/19 - 7:12
 */
// @Component 註解的作用是將類標識為bean組件,因為只有在ioc容器中才能使用依賴註入給成員變數賦值
@Component
public class Me {

    private String name;

    private List<String> hobby;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<String> getHobby() {
        return hobby;
    }

    public void setHobby(List<String> hobby) {
        this.hobby = hobby;
    }

    @Override
    public String toString() {
        return "Me{" +
                "name='" + name + '\'' +
                ", hobby=" + hobby +
                '}';
    }

}

3.5.2、創建控制器方法

image

    @Autowired
    private Me me;

    @RequestMapping("/me")
    public Me me(){
        return me;
    }

3.5.3、@Value註解的不足

  • @Value 註解需要一個個讀取配置文件中的參數值到成員變數中;

  • @Value 註解只能讀取單個值,不能讀取集合類型(本例為 my.hobby )的值。

image

    @Value("${my.name}")
    private String name;

    @Value("${my.hobby}")
    private List<String> hobby;

image

3.5.4、@ConfigurationProperties註解

  • @ConfigurationProperties 註解是 spring boot 提供的重要註解,其作用是可以將配置批量註入到 bean 對象中;

  • 只要 @ConfigurationProperties 註解指定的首碼 + bean 對象中的屬性名稱,和配置文件中的“鍵”保持一致即可註入成功;

  • 該註解的優點除了方便(不需要一個個讀取配置文件中的參數值到成員變數中)之外,還支持給集合類型賦值。

image

@ConfigurationProperties(prefix = "my")

3.5.5、測試配置批量註入的效果

image

3.6、多環境的配置

  • 在一個項目的實際過程中,會存在不同的環境,例如開發、測試和生產環境;

  • 在不同的環境中,會使用不同的參數配置,例如資料庫信息和日誌級別等;

  • 在 spring boot 中,可以根據不同的運行環境來載入不同的配置。

註意:如果希望預設配置文件不太臃腫,也可以使用該功能將不同模塊的配置參數存放到不同的配置文件中

3.6.1、配置文件分離

image

創建一個用於開發環境的配置文件 application-dev.properties

# 該文件的配置用於開發環境

my.name=liaojy_dev

image

創建一個用於測試環境的配置文件 application-test.properties

# 該文件的配置用於測試環境

my.name=liaojy_test

image

創建一個用於測試環境的配置文件 application-prod.properties

# 該文件的配置用於生產環境

my.name=liaojy_prod

3.6.2、激活配置文件

image

# application.properties(.yml) 是 spring boot 的預設配置文件
# 如果沒有額外激活其他(有尾碼的)配置文件,則預設只使用 application.properties(.yml)

my.name=liaojy_default

# spring.profiles.active 參數用於激活指定的配置文件
# 本例激活的是 application-dev.properties 配置文件
# 如果想激活多個配置文件,則使用逗號分隔,例如:spring.profiles.active=dev,test
spring.profiles.active=dev

3.6.3、配置參數的優先順序

  • 如果設置了 spring.profiles.active ,但和 application.properties 無重疊的配置參數,則application.properties 的配置參數依然生效;

  • 如果設置了 spring.profiles.active ,並且和 application.properties 有重疊的配置參數,則以激活的配置參數優先;

  • 如果設置了 spring.profiles.active ,並且激活多個配置文件以及有重疊的配置參數,則以最後激活的配置參數優先。

3.6.4、測試效果

image

image

本文來自博客園,作者:Javaer1995,轉載請註明原文鏈接:https://www.cnblogs.com/Javaer1995/p/17910266.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 如今,大規模、高時效、智能化數據處理已是“剛需”,企業需要更強大的數據平臺,來應對數據查詢、數據處理、數據挖掘、數據展示以及多種計算模型並行的挑戰,湖倉一體方案應運而生。 《實時湖倉實踐五講》是袋鼠雲打造的系列直播活動,將圍繞實時湖倉的建設趨勢和通用問題,邀請奮戰於企業數字化一線的核心產品&技術專家 ...
  • 最近開始體驗FastGPT知識庫問答系統,參考官方文檔,在自己的阿裡雲伺服器使用Docker Compose快速完成了部署。 環境說明:阿裡雲ECS,2核8G,X86架構,CentOS 7.9操作系統。 Docker與Docker-Compose安裝 1.登錄伺服器,執行相關命令完成安裝。 # 安裝 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 你知道奇怪的移動視口錯誤(也稱為100vh bug)嗎?或者如何以正確的方式創建全屏塊? 一、100vh bug 什麼是移動視口錯誤? 你是否曾經在網頁上創建過全屏元素?只需添加一行 CSS 並不難: .my-page { height: ...
  • 一、qiankun使用場景 1. 簡介:qiankun是在single-spa的基礎上實現的,可以保證各個項目獨立使用,也可以集成使用。各系統之間不受技術棧的限制,集成使用也能保證各樣式和全局變數的隔離。 模塊的插拔式使用,當公司項目集是一個大系統下包含多個子系統或者模塊時,可以採用這種方式動態部署 ...
  • 你知道奇怪的移動視口錯誤(也稱為100vh bug)嗎?或者如何以正確的方式創建全屏塊? 一、100vh bug 什麼是移動視口錯誤? 你是否曾經在網頁上創建過全屏元素?只需添加一行 CSS 並不難: .my-page { height: 100vh } 1vh是視口高度的1% ,正是我們所需要的。 ...
  • 基於 Chromium 的瀏覽器占了全球市場的 7 成!對於前端開發來說,Chrome 更是形影不離的飯碗級軟體
  • 前言 經過上個章節的介紹,大家可以瞭解到 uni-app-數據緩存 的基本使用方法 那本章節來給大家介紹一下 uni-app-pinia存儲數據 的基本使用方法 經過我這麼多篇章的介紹,我發現大家環境比較耗時,所以在今後的文章中,我會儘量減少環境的搭建 如果某一篇的文章環境確實是不一樣的,我會在文章 ...
  • 1. 行為準則 2. 需求的不確定性 2.1. 不斷變化的客戶需求 2.2. 軟體項目無法避免的挑戰 2.3. 產品需求和環境會隨著時間的推移而改變,你的應用程式也必須隨之改變 2.4. 不斷變化的需求會導致不穩定性,使開發工作偏離軌道 2.5. 通過構建可演進的架構來適應不斷變化的需求 2.5.1 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...