Отслеживание свойств файла конфигурации новой функции Spring Boot 2.3

Java

задний план

Когда мы используем весеннюю загрузку для упаковки в нескольких средах, свойства конфигурации имеют разные значения в разных средах, а именно:

spring:
  profiles:
    active: @project.profile@  #根据maven 动态配置profile
---
spring:
  profiles: dev
demo: lengleng_dev
---
spring:
  profiles: prd
demo: lengleng_prd

Или используйте центр конфигурации весеннего облака (nacos/config) и т. д.

Затем есть такое же свойство конфигурации приложения, источник значения может исходить отФайлы конфигурации, переменные окружения, параметры запускаи Т. Д. Во многих случаях из-заСложность приведенной выше конфигурации, когда приложение считывает конфигурацию, не соответствует ожидаемому нами значению.Например, мы хотим использовать значение конфигурационного файла dev environment, но оно перезаписывается переменной окружения или другими данными и т. д. Такие часто бывают только при запуске, выходной лог может найти причину ошибки.

решение

Spring boot 2.3 Actuator обеспечивает/actuator/configpropsконечная точка (предыдущие версии также имели эту конечную точку, но поведение изменилось/actuator/envНепротиворечивый) обеспечивает отслеживание свойств файла конфигурации,Нам удобно получать актуальное значение загрузки конфигурационного файла в режиме реального времени в приложении spring boot.

как пользоваться

  • Ввести зависимости привода
<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;
}
  • Получите доступ к конечной точке, чтобы получить значение файла конфигурации в режиме реального времени.

Специальные инструкции

  • 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 должен использовать эту конечную точку, чтобы определить, соответствует ли конфигурация ожиданиям, перед выполнением модульных тестов и избежать бесполезных условий выполнения.

  • Приведенный выше исходный код может относиться к:GitHub.com/теория системы/весна…

    image