Вы можете решить эту проблему, используя свой пользовательский 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
Вот и все