淺談SpringBoot2.3 新特配置文件屬性跟蹤
背景
當(dāng)我們使用 spring boot 在多環(huán)境打包,配置屬性在不同環(huán)境的值不同,如下:
spring: profiles: active: @project.profile@ #根據(jù)maven 動態(tài)配置profile --- spring: profiles: dev demo: lengleng_dev --- spring: profiles: prd demo: lengleng_prd
或者使用 spring cloud 配置中心 (nacos/config)等
再有就是 應(yīng)用配置的同一個屬性,值的來源可能來自配置文件、環(huán)境變量、啟動參數(shù)等等。 很多情況由于如上配置的復(fù)雜性,應(yīng)用在讀取配置的時候,并不是我們預(yù)期的值,比如我們想使用是配置文件 dev 環(huán)境的值,卻被環(huán)境變量的 或者其他的數(shù)據(jù)覆蓋等,這些往往只有等我們運(yùn)行時,輸出日志才能發(fā)現(xiàn)錯誤原因。
解決方案
spring boot 2.3 Actuator 提供 /actuator/configprops 端點 (之前版本也有此端點,但是行為發(fā)生變化了 /actuator/env 保持一致 ),提供對配置文件屬性跟蹤功能,方便我們在 spring boot 應(yīng)用中,實時的獲取配置文件實際加載值。
如何使用
引入 actuator 依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
暴露 configprops 端點
management: endpoints: web: exposure: include: 'configprops'
對應(yīng)配置類
@Data @Component @ConfigurationProperties("demo") public class DemoConfig { private String username; private String password; }
訪問 Endpoint 實時獲取配置文件的值
特殊說明
configprops Endpoint 會對敏感字段默認(rèn)脫敏 ,默認(rèn)關(guān)鍵字類
public class Sanitizer { private static final String[] REGEX_PARTS = { "*", "$", "^", "+" }; private static final Set<String> DEFAULT_KEYS_TO_SANITIZE = new LinkedHashSet<>(Arrays.asList("password", "secret", "key", "token", ".*credentials.*", "vcap_services", "sun.java.command")); }
配置個性化脫敏規(guī)則
management: endpoint: configprops: keys-to-sanitize: - 'aaa' - 'bbb'
當(dāng)配置類的某個屬性值為空時, 通過 /actuator/configprops 訪問,不會展示此屬性。
總結(jié)
configprops 端點對應(yīng) ConfigurationPropertiesReportEndpoint 類, 通過閱讀 可以了解從 PropertySource 獲取配置的技巧
應(yīng)用場景: CI 在執(zhí)行單元測試的前置應(yīng)該通過此端點判斷配置是否和預(yù)期一致,避免無用執(zhí)行條件
以上源碼可以參考: https://github.com/lltx/spring-boot-course
到此這篇關(guān)于淺談SpringBoot2.3 新特配置文件屬性跟蹤的文章就介紹到這了,更多相關(guān)SpringBoot2.3 文件屬性跟蹤內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java HashMap內(nèi)部實現(xiàn)原理詳解
這篇文章主要介紹了java HashMap內(nèi)部實現(xiàn)原理詳解的相關(guān)資料,需要的朋友可以參考下2017-02-02Spring中的@ControllerAdvice和@ExceptionHandler注解處理全局異常
這篇文章主要介紹了Spring中的@ControllerAdvice和@ExceptionHandler注解處理全局異常,@ControllerAdvice ,@ControllerAdvice是一個非常有用的注解,顧名思義,這是一個增強(qiáng)的 Controller,一般配合@ExceptionHandler使用來處理全局異常,需要的朋友可以參考下2024-01-01Java虛擬機(jī)之對象創(chuàng)建過程與類加載機(jī)制及雙親委派模型
這篇文章主要給大家介紹了關(guān)于Java虛擬機(jī)之對象創(chuàng)建過程與類加載機(jī)制及雙親委派模型的相關(guān)資料,本文通過示例代碼以及圖文介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2021-11-11Java中POST、GET、@RequestBody和@RequestParam區(qū)別詳析
在前后端傳json數(shù)據(jù)進(jìn)行交互的時候,同學(xué)們會經(jīng)常用到的兩個注解,@RequestBody和@RequestParam主要是用來接收前端傳給后端的json數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Java中POST、GET、@RequestBody和@RequestParam區(qū)別的相關(guān)資料,需要的朋友可以參考下2022-10-10