spring中PropertyPlaceholderConfigurer和PropertyOverrideConfigurer的使用

           先上类图:

           


          均实现了BeanFactoryPostProcessor,作为容器的后置处理器---时机发生在配置文件加载完成之后,bean实例化之前。

         

           而PriorityOrdered和PropertyResourceConfigurer组合实现order书序,描述了子类之间的加载顺序。

           

          继承PropertiesLoaderSupport类,主要属性为:

            locations--配置文件的位置。

             properties--配置项的默认值,可以被locations中的配置项覆盖。

             localOverride:是否由默认配置项覆盖locations中的配置项,默认为false


PropertyPlaceholderConfigurer

           PropertyPlaceholderConfigurer是负责读取location属性配置的的properties属性文件里的属性值,并将这些属性值设置成Spring配置文件中的占位符里。

      该类通过设置启用systemPropertiesMode和searchSystemEnvironment属性来控制占位符的值是否会到JVM系统属性(System.getProperty())和环境变量(System.getenv())中寻找。

        SystemPropertiesModeName属性用来指定系统变量(System.getProperty)是否覆盖proprties文件。默认是在配置文件里找不到时使用。三个选项分别是:

         SYSTEM_PROPERTIES_MODE_NEVER(不覆盖)

         SYSTEM_PROPERTIES_MODE_FALLBACK(默认值,不存在时覆盖)

         SYSTEM_PROPERTIES_MODE_OVERRIDE(覆盖)

       

          

searchSystemEnvironment属性的默认值为true,即允许环境变量覆盖properties中的值。

        这里以spring-batch默认的配置文件作为示例:

    

<bean id="placeholderProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
		depends-on="environment">
		<property name="location" value="classpath:batch-${ENVIRONMENT}.properties" />
		<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
		<property name="ignoreUnresolvablePlaceholders" value="true" />
		<property name="order" value="1" />
	</bean>

PropertyOverrideConfigurer

        PropertyOverrideConfigurer的属性文件指定的信息可以直接覆盖Spring配置文件中原默认值(不管这个属性是否使用了占位符以及是否存在)。

        ignoreInvalidKeys用来决定是否忽略不符合beanName.filedName这种规范的key,默认值是false,这个参数主要用来满足一个properties文件中可以放置任意类型的key。

      spring-batch配置文件的示例:

<bean id="overrideProperties" class="org.springframework.beans.factory.config.PropertyOverrideConfigurer"
		depends-on="environment">
		<property name="location" value="classpath:batch-${ENVIRONMENT}.properties" />
		<!-- Allow system properties (-D) to override those from file -->
		<property name="localOverride" value="true" />
		<property name="properties">
			<bean class="java.lang.System" factory-method="getProperties" />
		</property>
		<property name="ignoreInvalidKeys" value="true" />
		<property name="order" value="2" />
	</bean>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值