spring中context:property-placeholder/元素

1.有些参数在某些阶段中是常量 java

    好比:a、在开发阶段咱们链接数据库时的链接url,username,password,driverClass等  mysql

                 b、分布式应用中client端访问server端所用的server地址,port,service等   spring

                  c、配置文件的位置 sql

2.而这些参数在不一样阶段之间又每每须要改变 数据库

    好比:在项目开发阶段和交付阶段数据库的链接信息每每是不一样的,分布式应用也是一样的状况。 分布式

指望:能不能有一种解决方案能够方便咱们在一个阶段内不须要频繁书写一个参数的值,而在不一样阶段间又能够方便的切换参数配置信息 ide

解决:spring3中提供了一种简便的方式就是context:property-placeholder/元素 url

只须要在spring的配置文件里添加一句:<context:property-placeholder location="classpath:jdbc.properties"/> 便可,这里location值为参数配置文件的位置,参数配置文件一般放在src目录下,而参数配置文件的格式跟java通用的参数配置文件相同,即键值对的形式,例如: spa

#jdbc配置 code

test.jdbc.driverClassName=com.mysql.jdbc.Driver
test.jdbc.url=jdbc:mysql://localhost:3306/test
test.jdbc.username=root
test.jdbc.password=root

行内#号后面部分为注释

应用:

1.这样一来就能够为spring配置的bean的属性设置值了,好比spring有一个jdbc数据源的类DriverManagerDataSource

在配置文件里这么定义bean:

<bean id="testDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${test.jdbc.driverClassName}"/>
    <property name="url" value="${test.jdbc.url}"/>
    <property name="username" value="${test.jdbc.username}"/>
    <property name="password" value="${test.jdbc.password}"/>
</bean>

2.甚至能够将${ }这种形式的变量用在spring提供的注解当中,为注解的属性提供值

---------------------------------------------------------  

外在化应用参数的配置

在开发企业应用期间,或者在将企业应用部署到生产环境时,应用依赖的不少参数信息每每须要调整,好比LDAP链接、RDBMS JDBC链接信息。对这类信息进行外在化管理显得格外重要。PropertyPlaceholderConfigurer和PropertyOverrideConfigurer对象,它们正是担负着外在化配置应用参数的重任。

  <context:property-placeholder/>元素

PropertyPlaceholderConfigurer实现了BeanFactoryPostProcessor接口,它可以对<bean/>中的属性值进行外在化管理。开发者能够提供单独的属性文件来管理相关属性。好比,存在以下属性文件,摘自userinfo.properties。
db.username=scott
db.password=tiger

以下内容摘自propertyplaceholderconfigurer.xml。正常状况下,在userInfo的定义中不会出现${db.username}、${db.password}等相似信息,这里采用PropertyPlaceholderConfigurer管理username和password属性的取值。DI容器实例化userInfo前,PropertyPlaceholderConfigurer会修改userInfo的元数据信息(<bean/>定义),它会用userinfo.properties中db.username对应的scott值替换${db.username}、db.password对应的tiger值替换${db.password}。最终,DI容器在实例化userInfo时,UserInfo便会获得新的属性值,而不是${db.username}、${db.password}等相似信息。

 
  1. <bean id="propertyPlaceholderConfigurer"   
  2.         class="org.springframework.beans.factory.config.  
  3. PropertyPlaceholderConfigurer">  
  4.     <property name="locations">  
  5.         <list>  
  6.             <value>userinfo.properties</value>  
  7.         </list>  
  8.     </property>  
  9. </bean>  
  10.  
  11. <bean name="userInfo" class="test.UserInfo">  
  12.   <property name="username" value="${db.username}"/>  
  13.   <property name="password" value="${db.password}"/>  
  14. </bean> 

经过运行并分析PropertyPlaceholderConfigurerDemo示例应用,开发者可以深刻理解PropertyPlaceholderConfigurer。为简化PropertyPlaceholderConfigurer的使用,Spring提供了<context:property-placeholder/>元素。下面给出了配置示例,启用它后,开发者便不用配置PropertyPlaceholderConfigurer对象了。

 
  1. <context:property-placeholder location="userinfo.properties"/> 

PropertyPlaceholderConfigurer内置的功能很是丰富,若是它未找到${xxx}中定义的xxx键,它还会去JVM系统属性(System.getProperty())和环境变量(System.getenv())中寻找。经过启用systemPropertiesMode和searchSystemEnvironment属性,开发者可以控制这一行为。

相关文章
相关标签/搜索