SpringBoot自定義屬性配置以及@ConfigurationProperties註解與@Value註解區別

来源:https://www.cnblogs.com/wangkaihua/archive/2018/12/23/10165290.html
-Advertisement-
Play Games

我們可以在application.properties中配置自定義的屬性值,為了獲取這些值,我們可以使用spring提供的@value註解,還可以使用springboot提供的@ConfigurationProperties註解非常方便的完成屬性值的註入。 ...


我們可以在application.properties中配置自定義的屬性值,為了獲取這些值,我們可以使用spring提供的@value註解,還可以使用springboot提供的@ConfigurationProperties註解非常方便的完成屬性值的註入。

1. 在application.properties中添加自定義屬性配置

#七牛oss配置
qiniu.accessKey = zcqSW4uul68vm7K_ryHEYPVTpM-9H7UP0eslY3xk
qiniu.secretKey = 2QwaKSktWm5O1sIaqQqzqOMF6WtD6sncNnRaYB4w
qiniu.bucket = blog
qiniu.path = http://static.wangkaihua.com

2. 編寫Bean類,載入屬性

Sam類需要添加@Component註解,讓spring在啟動的時候掃描到該類,並添加到spring容器中。

第一種:使用spring支持的@Value()實現

import org.springframework.stereotype.Component;

/**
 * 七牛oss 文件上傳的相關配置類
 * @author wangkaihua
 */

@Component
public class QiNiuConfig {
    @Value("${qiniu.accessKey}")
    private String accessKey;
    
    @Value("${qiniu.secretKey}")
    private String secretKey;

    @Value("${qiniu.bucket}")
    private String bucket;

    @Value("${qiniu.path}")
    private String path;
    //省略getXXX、setXXX方法
}

第二種:使用@ConfigurationProperties(prefix="") 設置首碼,屬性上不需要添加註解。

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 七牛oss 文件上傳的相關配置類
 * @author wangkaihua
 */
@Component
@ConfigurationProperties(prefix = "qiniu")
public class QiNiuConfig {
    private String accessKey;
    private String secretKey;
    private String bucket;
    private String path;
    //省略getXXX、setXXX方法
}

3. 在controller中或者service中註入並使用QiNiuConfig這個Bean。

@Component
public class QiniuUtil {
    @Autowired
    private QiNiuConfig qiNiuConfig;
 
    public String uploadImg(FileInputStream file) throws QiniuException {
    // 省略xxxxxx
        System.out.printl("獲取自定義屬性值:"+qiNiuConfig.getPath());
        System.out.printl("獲取自定義屬性值:"+qiNiuConfig.getBucket());
    }
}

區別

  • @ConfigurationProperties能夠批量註入配置文件的屬性。@Value只能一個個指定。
  • @ConfigurationProperties支持鬆散綁定。@ConfigurationProperties(prefix = "person"),只需要指定一個首碼,就能綁定有這個首碼的所有屬性值。
  • @Value支持SpringEl的語法。@ConfigurationProperties不支持SpringEl的語法。
  • @ConfigurationProperties還支持JSR303進行配置文件值及校驗。
@Component
@ConfigurationProperties(prefix = "qiniu")
@Validated
public class QiNiuConfig {
    @NotNull
    private String accessKey;
    @NotNull
    private String secretKey;
    @NotNull
    private String bucket;
    @Email
    private String path;
    //省略getXXX、setXXX方法
}

當我們註入的不是一個郵箱格式時,啟動項目報錯:

***************************
APPLICATION FAILED TO START
***************************
Description:
Binding to target com.wangkaihua.myblog.common.QiNiuConfig@3e792ce3 failed:
    Property: qiniu.path
    Value: http://static.wangkaihua.com
    Reason: 不是一個合法的電子郵件地址
Action:
Update your application's configuration

總結

如果說,我們只是在某個業務邏輯中需要獲取一下配置文件中的某項值,使用@Value,如果我們要編寫了一個javabean和配置文件進行映射,就直接使用ConfigurationProperties簡化配置;


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

-Advertisement-
Play Games
更多相關文章
  • IDE:Integrated Develop Environment,集成開發環境。利用IDE編程的好處不用多說,節省大量的時間和精力。 現在總結一下利用IDE編寫一個HelloWorld的具體流程。首先是建立一個項目,得有一個項目名。 具體就是:File->New->Java Project 接下 ...
  • 使用迭代器remove方法刪除元素 public class InteratorDemo { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("老師"); list.ad ...
  • 在spring 3.2中,新增了@ControllerAdvice 註解,可以用於定義@ExceptionHandler、@InitBinder、@ModelAttribute,並應用到所有@RequestMapping中。@ControllerAdvice官方文檔。創建全局異常處理類:通過使用@C... ...
  • 簡介 本系列基於 的官方文檔,除去了文檔中一些冗餘的東西,加上了一些自己的理解,意圖是在於幫助更多初識 的人來進行一次探險。 本系列建議具有Java基礎和Spring使用經驗的同學學習。 什麼是Spring Boot 在使用之前,我們先來看看 到底是個啥,從字面意義上去理解,是Spring的一個引導 ...
  • 一、spring概述 Spring是一個開放源代碼的設計層面框架,他解決的是業務邏輯層和其他各層的松耦合問題,因此它將面向介面的編程思想貫穿整個系統應用。Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson創建。簡單來說,Spring是一個分層的JavaSE/E ...
  • 偶然看到一篇100多行實現SpringMvc的博客,閱讀後整理加實現出來。大家共勉!(紙上得來終覺淺,絕知此事要躬行。) 實現Spring的部分。 代碼解析如下: 1、首先創建Servelt,繼承HttpServlet。覆蓋init/doGet/doPost方法。 2、配置web.xml 2.1、配 ...
  • Python類練習 定義一個類 列印Point: Point實例化為一個p1: 我們直接列印 結果為 __main__.Point` 給實例p1添加屬性 (3, 4) 原點(0, 0)與p1之間的距離:5.0 (3, 4) 定義矩形 實例化一個例子r1 (100, 200) 列印矩形的寬度width ...
  • 這篇文章一起來回顧複習下spring的事務操作.事務是spring的重點, 也是面試的必問知識點之一. 說來這次面試期間,也問到了我,由於平時用到的比較少,也沒有關註過這一塊的東西,所以回答的不是特別好,所以借這一篇文章來回顧總結一下,有需要的朋友,也可以點贊收藏一下,複習一下這方面的知識,為年後的 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...