[size=large]背景[/size]
某个jar包里使用了PropertyPlaceholderConfigurer,配置文件也打在jar包里,有些场景下要求覆盖配置文件。
代码如下:
[size=large]实现[/size]
PropertyPlaceholderConfigurer 提供了locations属性,可以添加多个配置文件,并且后面的文件中的相同变量会覆盖前面的。
我们可以通过定义多个配置文件的方式,来达到覆盖配置文件的目的。
例如,我们可以定义 dev.properies、product.properties文件,分别代表开发环境、生产环境的配置项,在生产环境提供product.properties覆盖dev.properties,达到适配不同环境的目的。
注意 ignoreResourceNotFound 属性,它的作用是 在找不到locations中指定的文件时,忽略异常继续流程,这样就不需要在每个环境都提供product配置了。
除了使用PropertyPlaceholderConfigurer的locations属性方式外,还可以通过自定义PlaceHolder实现的方式来扩展,以解决其它更复杂的问题。
ps:环境适配的方案很多,在工程规模较小的时候可以使用此方案。
某个jar包里使用了PropertyPlaceholderConfigurer,配置文件也打在jar包里,有些场景下要求覆盖配置文件。
代码如下:
<bean id="_db_config" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:db-config.properties"/>
</bean>
[size=large]实现[/size]
PropertyPlaceholderConfigurer 提供了locations属性,可以添加多个配置文件,并且后面的文件中的相同变量会覆盖前面的。
我们可以通过定义多个配置文件的方式,来达到覆盖配置文件的目的。
例如,我们可以定义 dev.properies、product.properties文件,分别代表开发环境、生产环境的配置项,在生产环境提供product.properties覆盖dev.properties,达到适配不同环境的目的。
<bean id="_db_config" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:db-config.properties</value>
<value>file:/home/admin/db-config-product.properties</value>
</list>
</property>
<property name="ignoreResourceNotFound" value="true" />
</bean>
注意 ignoreResourceNotFound 属性,它的作用是 在找不到locations中指定的文件时,忽略异常继续流程,这样就不需要在每个环境都提供product配置了。
除了使用PropertyPlaceholderConfigurer的locations属性方式外,还可以通过自定义PlaceHolder实现的方式来扩展,以解决其它更复杂的问题。
ps:环境适配的方案很多,在工程规模较小的时候可以使用此方案。