Ответ 1
Итак, мне нужен способ, который обновляет (переопределяет) значения загруженного файла свойств spring с моими последними обновлениями во внешнем файле свойств.
Вы можете использовать PropertyPlaceholderConfigurer.
Аналогично, если вы хотите использовать пространство имен context
<context:property-placeholder locations="classpath:yourClasspath.properties,file:/some/resource/path/filePropertiesToOverride.properites"/>
или таким образом
<bean id="placeholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:yourClasspath.properties</value>
<value>file:/some/resource/path/filePropertiesToOverride.properites</value>
</list>
</property>
</bean>
В соответствии с javadoc СвойстваLoaderSupport.setLocations(Resource [])
... Примечание. Свойства, определенные в более поздних файлах, переопределяют свойства, определенные ранее файлами, в случае перекрытия ключей. Следовательно, убедитесь, что наиболее конкретные файлы являются последними в указанном списке местоположений.
.
Было бы здорово, если бы кто-то мог также поделиться способом обновления предварительно загруженных свойств.
В данный момент вы используете PropertyPlaceholderConfigurer
. Так как a PropertyPlaceholderConfigurer
является BeanFactoryPostProcessor
, он пересекает определения bean (представление объекта beans.xml
) и заменяет строки свойств (например, ${someProp}). После этого beans получает экземпляр и инициализируется. Таким образом, невозможно "перезагрузить" свойства.
Еще больше нужно учитывать, хотите ли вы создать приложение, которое может реагировать на изменения свойств во время выполнения:
- Как вы можете инициировать изменение в Runtime? Например. таймер, который опросает файл свойств для изменений, JMX,...?
- Как узнают об обновлениях классы, зависящие от свойств? Например. реализация прослушивателя.
- Как синхронизировать обновления многих зависимых свойств? Например. представьте, что произойдет, если свойства будут обновляться во время запроса веб-приложения без синхронизации. Часть запроса может использовать старую и другую новые свойства.
По крайней мере, я бы рекомендовал использовать конфигурацию apache commons. Но это всего лишь структура, которая решает несколько проблем, и вам все равно придется думать о решениях вышеперечисленных вопросов.