Переопределить значение свойства в PropertyPlaceholderConfigurer
Мне нужно переопределить значение свойства, указанное в моем файле свойств, при загрузке сервера приложений JBOSS.
Я опробовал приведенный ниже код, переопределяющий метод processProperties() в PropertyPlaceholderConfigurer.
Мой файл свойств имеет эту запись
base.url = "defaultUrl"
public class CustomPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
protected String convertPropertyValue(String originalValue) {
return (originalValue != null) ? originalValue.trim() : originalValue;
}
@Override
protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props)
throws BeansException {
super.processProperties(beanFactory, props);
for (Enumeration names = props.propertyNames(); names.hasMoreElements();) {
String key = (String) names.nextElement();
props.put("base.url", getUpdatedUrl());
}
}
}
Я внедряю значение base.url в заполнитель ${base.url} в контексте приложения.
Как я должен обновить значение данного свойства во время выполнения. Приведенный выше код всегда принимает значение в файле свойств, а не обновленное значение.
0 ответов
Смахиваю пыль с этого вопроса. Это можно сделать с помощью PropertyPlaceholderConfigurer и добавления нового файла свойств (в конце списка), в котором вы поместите свойства, которые хотите переопределить. (Имя / путь к файлу свойств может содержать переменную среды, которую вы передаете во время сборки). Вот javadoc изPropertiesLoaderSupport#setLocations
:
Примечание. Свойства, определенные в более поздних файлах, переопределят свойства, определенные ранее в файлах, в случае перекрытия ключей. Следовательно, убедитесь, что наиболее конкретные файлы находятся последними в данном списке расположений.
Начиная с Spring 5.2 это устарело в пользу PropertySourcesPlaceholderConfigurer:
Специализация PlaceholderConfigurerSupport, которая разрешает заполнители ${...} в значениях свойств определения компонентов и аннотации @Value для текущей среды Spring и ее набора PropertySources.
Некоторые примеры здесь