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

 更新时间:2020年06月22日 15:02:27   作者:冷冷  
这篇文章主要介绍了浅谈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 在执行单元测试的前置应该通过此端点判断配置是否和预期一致,避免无用执行条件

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

到此这篇关于浅谈SpringBoot2.3 新特配置文件属性跟踪的文章就介绍到这了,更多相关SpringBoot2.3 文件属性跟踪内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 详解Java8 Collect收集Stream的方法

    详解Java8 Collect收集Stream的方法

    这篇文章主要介绍了Java8-Collect收集Stream的方法,提到了收集器的作用,连接收集器的方法,需要的朋友可以参考下
    2018-04-04
  • Spring模块详解之Spring ORM和Spring Transaction详解

    Spring模块详解之Spring ORM和Spring Transaction详解

    Spring ORM 是 Spring 框架的模块之一,旨在简化与 JPA、Hibernate、JDO 等 ORM 工具的集成,通过提供统一的 API 和模板类,如 HibernateTemplate 和 JpaTemplate,Spring ORM 使开发者可以更便捷地执行数据库操作,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • spring中@ControllerAdvice 注解的使用

    spring中@ControllerAdvice 注解的使用

    @ControllerAdvice注解是Spring3.2中新增的注解,主要用于Controller的全局配置,本文就来介绍一下spring中@ControllerAdvice 注解的使用,感兴趣的可以了解一下
    2024-09-09
  • Mybatis批量更新报错问题

    Mybatis批量更新报错问题

    这篇文章主要介绍了Mybatis批量更新报错的问题及解决办法,包括mybatis批量更新的两种方式,需要的的朋友参考下
    2017-01-01
  • Spring中BeanUtils.copyProperties的坑及解决

    Spring中BeanUtils.copyProperties的坑及解决

    这篇文章主要介绍了Spring中BeanUtils.copyProperties的坑及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • java如何从不规则的字符串中截取出日期

    java如何从不规则的字符串中截取出日期

    这篇文章主要介绍了java从不规则的字符串中截取出日期的方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • mybatis参数类型不匹配错误argument type mismatch的处理方案

    mybatis参数类型不匹配错误argument type mismatch的处理方案

    这篇文章主要介绍了mybatis参数类型不匹配错误argument type mismatch的处理方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 基于SpringBoot的SSMP的整合案例

    基于SpringBoot的SSMP的整合案例

    这篇文章主要介绍了SpringBoot整合SSMP的详细教程,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Tomcat 实现WebSocket详细介绍

    Tomcat 实现WebSocket详细介绍

    这篇文章主要介绍了Tomcat 如何实现WebSocket的相关资料,对WebSocket协议通信的过程进行了详细介绍,需要的朋友可以参考下
    2016-12-12
  • Java中List add添加不同类型元素的讲解

    Java中List add添加不同类型元素的讲解

    今天小编就为大家分享一篇关于java的List add不同类型的对象,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03

最新评论