2014-12-30 1 views
3

Я использую PropertyPlaceholderConfigurer для загрузки файла свойств с использованием пружины.Весенний загрузчик файлов свойств: как обновлять свойства во время выполнения, когда они обновляются в файле?

<bean id="placeholderProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="locations"> 
      <list>   
      <value>file:${applicationProperties}</value>  
      </list> 
     </property> 
    </bean> 

Я переопределяю этот PropertyPlaceholderConfigurer для хранения всей пары значений ключа на карте. Теперь требование - когда этот файл свойств обновляется и сохраняется в файловой системе, тогда эта карта должна обновляться новыми значениями во время выполнения.

Как достичь этого требования?

+1

Кто-то расширил его для поддержки этого https://github.com/Unicon/springframework-addons/wiki/Auto-reloading-properties-files –

ответ

-2

Вы должны использовать BeanFactory постпроцессор:

Application-context.xml

<bean id="connection" class="com.bfpp.beans.Connectionmanager"> 
<property name="url" value="${db.url}"></property> 
<property name="username" value="${db.un}"></property> 
<property name="pass" value="${db.pwd}"></property> 
</bean> 

<bean id="pphc" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
<property name="location" value="classpath:db.properties"></property> 
</bean> 
</beans> 

написать соответствующее соединение боб В тестовом классе

 ApplicationContext ctx=new ClassPathXmlApplicationContext("com/bfpp/common/application-context.xml"); 
     /*BeanFactory factory=new XmlBeanFactory(new ClassPathResource("com/bfpp/common/application-context.xml"));*/ 
     /*BeanFactoryPostProcessor bfpp=factory.getBean("pphc",BeanFactoryPostProcessor.class); 
     bfpp.postProcessBeanFactory((ConfigurableListableBeanFactory) factory);*/ 
     Connectionmanager c=ctx.getBean("connection",Connectionmanager.class); 
     System.out.println(c); 

записи дб. свойства

db.url=jdbc:odbc:[email protected]:xe 
db.un=username 
db.pwd=password 

Они будут заменены в XML-файле перед началом инициализации компонента. В случае beanfactory бобы будут загружены, когда мы вызываем метод getBean(), поэтому код в комментариях не требуется, если мы используем applicationcontext, поскольку он создает компоненты в момент создания ClassPathXmlApplicationContext.

Смежные вопросы