Sau*_*akh 28 java spring properties
我在我的一个Spring配置文件中定义了以下属性文件:
<context:property-placeholder location="classpath:project.properties"/>
Run Code Online (Sandbox Code Playgroud)
现在我想从一些不在类路径中的外部属性文件中覆盖一些属性.
假设我已将项目部署到某处,我需要进行一些动态配置更改.我不想更新容器中的项目代码库(tomcat或任何东西).
1.)所以我需要一种方法,用我在外部属性文件中的最新更新来更新(覆盖)spring的加载属性文件的值.
2.)如果有人也可以共享刷新预加载属性的方法,那将会很棒.
Ren*_*ink 34
因此,我需要一种方法,使用外部属性文件中的最新更新来更新(覆盖)spring的已加载属性文件的值.
您可以使用PropertyPlaceholderConfigurer.
这种方式如果要使用context命名空间
<context:property-placeholder location="classpath:yourClasspath.properties,file:/some/resource/path/filePropertiesToOverride.properites"/>
Run Code Online (Sandbox Code Playgroud)
或者这样
<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>
Run Code Online (Sandbox Code Playgroud)
根据PropertiesLoaderSupport.setLocations(Resource [])的javadoc
...注意:在重叠键的情况下,在以后的文件中定义的属性将覆盖先前定义的文件的属性.因此,请确保最具体的文件是给定位置列表中的最后一个文件.
.
如果有人也可以分享刷新预加载属性的方法,那将会很棒.
目前你正在使用PropertyPlaceholderConfigurer.因为a PropertyPlaceholderConfigurer是BeanFactoryPostProcessor遍历bean定义(对象表示beans.xml)并替换属性字符串(例如$ {someProp}).之后,bean被实例化并初始化.因此,没有办法"重新加载"属性.
如果要构建一个可以在运行时对属性更改做出反应的应用程序,还有更多需要考虑的问题:
至少我建议使用apache commons配置.但它只是一个解决一些问题的框架,你仍然需要考虑上述问题的解决方案.