歡迎您光臨本站 註冊首頁

淺談SpringBoot2.3 新特配置文件屬性跟蹤

←手機掃碼閱讀     e36605 @ 2020-06-23 , reply:0

背景
 

當我們使用 spring boot 在多環境打包,配置屬性在不同環境的值不同,如下:

  spring:   profiles:    active: @project.profile@ #根據maven 動態配置profile  ---  spring:   profiles: dev  demo: lengleng_dev  ---  spring:   profiles: prd  demo: lengleng_prd

 

或者使用 spring cloud 配置中心 (nacos/config)等

再有就是 應用配置的同一個屬性,值的來源可能來自配置文件、環境變量、啟動參數等等。 很多情況由於如上配置的複雜性,應用在讀取配置的時候,並不是我們預期的值,比如我們想使用是配置文件 dev 環境的值,卻被環境變量的 或者其他的數據覆蓋等,這些往往只有等我們運行時,輸出日誌才能發現錯誤原因。

解決方案
 

spring boot 2.3 Actuator 提供 /actuator/configprops 端點 (之前版本也有此端點,但是行為發生變化了 /actuator/env 保持一致 ),提供對配置文件屬性跟蹤功能,方便我們在 spring boot 應用中,實時的獲取配置文件實際加載值。

如何使用
 

引入 actuator 依賴
 

  org.springframework.bootspring-boot-starter-actuator

 

暴露 configprops 端點
 

  management:   endpoints:    web:     exposure:      include: 'configprops'

 

對應配置類
 

  @Data  @Component  @ConfigurationProperties("demo")  public class DemoConfig {      private String username;      private String password;  }

 

訪問 Endpoint 實時獲取配置文件的值

特殊說明
 

configprops Endpoint 會對敏感字段默認脫敏 ,默認關鍵字類
 

  public class Sanitizer {      private static final String[] REGEX_PARTS = { "*", "$", "^", "+" };      private static final SetDEFAULT_KEYS_TO_SANITIZE = new LinkedHashSet<>(Arrays.asList("password", "secret",        "key", "token", ".*credentials.*", "vcap_services", "sun.java.command"));  }

 

配置個性化脫敏規則
 

  management:   endpoint:    configprops:     keys-to-sanitize:      - 'aaa'      - 'bbb'

 

當配置類的某個屬性值為空時, 通過 /actuator/configprops 訪問,不會展示此屬性。
 

總結
 

configprops 端點對應 ConfigurationPropertiesReportEndpoint 類, 通過閱讀 可以瞭解從 PropertySource 獲取配置的技巧
 應用場景: CI 在執行單元測試的前置應該通過此端點判斷配置是否和預期一致,避免無用執行條件
 

以上源碼可以參考: https://github.com/lltx/spring-boot-course


   


[e36605 ] 淺談SpringBoot2.3 新特配置文件屬性跟蹤已經有217次圍觀

http://coctec.com/docs/java/show-post-239477.html