Я планирую использовать Spring в качестве службы конфигурации для нашего корпоративного приложения.
Эта часть была хорошо задокументирована в весеннем справочном руководстве и других блогах.В основном, используя файл свойств и контекст: свойство-заполнитель, я планирую создать и заполнить значения в бине, который, в свою очередь, используется приложением.
Бывают случаи, когда файл свойств изменяется и в этом случаеЯ хочу, чтобы бин отражал измененные значения.Я понимаю, что ApplicationContext.refresh () - это способ обновления bean-компонента и его значений конфигурации.ApplicationContext.refresh () работал как шарм.
<context:property-override location="file:///d:/work/nano-coder/quickhacks/src/main/resources/myproperties.properties"/>
<bean id="myconfig" class="org.nanocoder.quickhacks.config.MyPropertyBean">
<property name="cacheSize" value="${registry.ehcache.size}"/>
<property name="httpHostName" value="${url.httpHostName}"/>
<property name="httpsHostName" value="${url.httpsHostName}"/>
<property name="imageServers">
<list>
<value>${url.imageserver1}</value>
<value>${url.imageserver2}</value>
<value>${url.imageserver3}</value>
</list>
</property>
</bean>
Однако при обновлении контекста я обнаружил, что одновременные вызовы ApplicationContext.getBean () или любой операции получения для bean-компонента потенциально не выполняются из-за IllegalStateException или BeanCreationException .
value = context.getBean("myconfig", MyPropertyBean.class).getHttpHostName();
Вопросы
- Возможно ли, что вызовы context.refresh () не влияют на другие одновременные вызовы
- если context.refresh () может нарушить одновременный доступ к контексту приложения, существуют ли какие-либо стратегии, позволяющие избежать этого.
Ваши указатели будут высоко оценены.