stone2083

小谈PropertyPlaceholderConfigurer

背景:让应用在一个环境下,以多实例的方法运行.
Log问题,可以通过Log4j占位符实现(见前文:http://www.blogjava.net/stone2083/archive/2010/07/01/324935.html)
其他Java组件代码依赖了本地环境资源,怎么解决呢?

对于使用Spring的组件来说,PropertyPlaceholderConfigurer能帮我们解决这一问题.

PropertyPlaceholderConfigurer除了支持配置的properties文件外,还支持系统属性(System.getProperties()).当然,它有三种模式:
 1/** Never check system properties. */
 2public static final int SYSTEM_PROPERTIES_MODE_NEVER = 0;
 3 
 4/**
 5 * Check system properties if not resolvable in the specified properties.
 6 * This is the default.
 7 */
 8public static final int SYSTEM_PROPERTIES_MODE_FALLBACK = 1;
 9 
10/**
11 * Check system properties first, before trying the specified properties.
12 * This allows system properties to override any other property source.
13 */
14public static final int SYSTEM_PROPERTIES_MODE_OVERRIDE = 2;

对于使用本地环境资源的bean来说,只要配置:
 1 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
 2     <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
 3     <property name="locations">
 4         <list>
 5             <value>classpath*:spring/env.properties</value> <!--无需配置node-->
 6         </list>
 7     </property>
 8 </bean>
 9 
10 <bean id="javaBean" class="com.alibaba.javalab.spring.JavaBean">
11      <property name="lockFile" value="/home/stone/base/${node}/lock" />
12 </bean>


在启动脚本中,只要加入-Dnode=instanceX即可.

总结:
PropertyPlaceholderConfigurer支持properties文件和系统属性.并且存在三种覆盖策略.

posted on 2010-07-23 08:51 stone2083 阅读(1273) 评论(0)  编辑  收藏 所属分类: java


只有注册用户登录后才能发表评论。


网站导航: