Значение Spring application.yml в нижний регистр - PullRequest
0 голосов
/ 05 ноября 2019

В настоящее время я использую spring.application.name в качестве постфикса для создания индекса вasticsearch, который хочет, чтобы индекс был в нижнем регистре.

примерно так

management:
  metrics:
    export:
      elastic:
        host: ${ES_METRICS_HOST}
        # disabled for local profile
        enabled: true
        # The interval at which metrics are sent to Elastic. The default is 1 minute.
        step: 1m
        # The index to store metrics in, defaults to "metrics"
        index: metrics-${spring.application.name}

Я былинтересно, есть ли способ сделать toLowerCase для этой ссылки?

Не могу найти его в документации

Спасибо

1 Ответ

0 голосов
/ 05 ноября 2019

Вы можете решить эту проблему, используя свой пользовательский EnvironmentPostProcessor , я тестировал ответ, поэтому ниже приведен код, который я написал.

  • Напишите CustomEnvironmentPostProcessor для своего приложения, аннотируйте классс @Order(Ordered.LOWEST_PRECEDENCE) не удалось добавить с кодом из-за проблемы форматирования

ниже приведен класс

public class CustomEnvironmentPostProcessor implements EnvironmentPostProcessor {
    private static final String PROPERTY_SOURCE_NAME = "systemProperties";

    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        Map<String, Object> map = new HashMap<String, Object>();
        String home = "spring.application.name";
        String key = "management.metrics.export.elastic.index";
        String metricsName = "metrics-" + environment.getProperty(home).toLowerCase();
        map.put(key, metricsName);
        addOrReplace(environment.getPropertySources(), map);
    }

    private void addOrReplace(MutablePropertySources propertySources, Map<String, Object> map) {
        MapPropertySource target = null;
        if (propertySources.contains(PROPERTY_SOURCE_NAME)) {
            PropertySource<?> source = propertySources.get(PROPERTY_SOURCE_NAME);
            if (source instanceof MapPropertySource) {
                target = (MapPropertySource) source;
                for (String key : map.keySet()) {
                    if (!target.containsProperty(key)) {
                        target.getSource().put(key, map.get(key));
                    }
                }
            }
        }
        if (target == null) {
            target = new MapPropertySource(PROPERTY_SOURCE_NAME, map);
        }
        if (!propertySources.contains(PROPERTY_SOURCE_NAME)) {
            propertySources.addLast(target);
        }
    }

}
  • после того, как вы написали свой CustomEnvironmentPostProcessor, зарегистрируйте его в приложении
  • cretae spring.factories файл в ресурсах / META-INF
  • добавьте запись вашего CustomEnvironmentPostProcessor (используйте собственное имя пакета)

ниже - запись

org.springframework.boot.env.EnvironmentPostProcessor=com.shailesh.config.CustomEnvironmentPostProcessor

Вот и все

...