浅谈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)等
再有就是 应用配置的同一个属性,值的来源可能来自配置文件、环境变量、启动参数等等。 很多情况由于如上配置的复杂性,应用在读取配置的时候,并不是我们预期的值,比如我们想使用是配置文件 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 访问,不会展示此属性。
总结
configprops 端点对应 ConfigurationPropertiesReportEndpoint 类, 通过阅读 可以了解从 PropertySource 获取配置的技巧
应用场景: CI 在执行单元测试的前置应该通过此端点判断配置是否和预期一致,避免无用执行条件
栏 目:JAVA代码
下一篇:解析Java的Jackson库中对象的序列化与数据泛型绑定
本文标题:浅谈SpringBoot2.3 新特配置文件属性跟踪
本文地址:http://www.codeinn.net/misctech/44208.html
阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机