Переопределить значение свойства в 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.

Некоторые примеры здесь

Другие вопросы по тегам