浅谈SpringBoot2.3 新特配置文件属性跟踪

网友投稿 292 2022-12-03


浅谈SpringBoot2.3 新特配置文件属性跟踪

背景

当我们使用 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)等

再有就是 应用配置的同一个属性,值的来源可能来自配置文件、环境变量、启动参数等等。 很多情况由于如上配置的复杂性,应用在读取配置的时候,并不是我们预期的值,比如我们http://想使用是配置文件 dev 环境的值,却被环境变量的 或者其他的数据覆盖等,这些往往只有等我们运行时,输出日志才能发现错误原因。

解决方案

spring boot 2.3 Actuator 提供 /actuator/configprops 端点 (之前版本也有此端点,但是行为发生变化了 /actuator/env 保持一致 ),提qwjawOH供对配置文件属性跟踪功能,方便我们在 spring boot 应用中,实时的获取配置文件实际加载值。

如何使用

引入 actuator 依赖

org.springframework.boot

spring-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 {

privateqwjawOH static final String[] REGEX_PARTS = { "*", "$", "^", "+" };

private static final Set 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 访问,不会展示此属性。

总结

configprops 端点对应 ConfigurationPropertiesReportEndpoint 类, 通过阅读 可以了解从 PropertySource 获取配置的技巧

应用场景: CI 在执行单元测试的前置应该通过此端点判断配置是否和预期一致,避免无用执行条件

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:实例代码讲解JAVA 观察者模式
下一篇:Java for each实现机制代码原理解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~