背景
当我们使用 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 依赖
<dependency>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-starter
-actuator
</artifactId
>
</dependency
>
暴露 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 Set
<String> DEFAULT_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 访问,不会展示此属性。
总结
如果你有学到,请给我点赞👍+关注,这是对小编的最大支持!千篇一律的皮囊,万里挑一的灵魂,一个不太一样的写手。
对了,小编为大家准备了一套2020最新的Java资料,需要点击下方链接获取方式
学习java,你掌握这些。二三线也能轻松拿8K以上