`

Spring配置:用context:property-placeholder替换PropertyPlaceholderConfigurer

 
阅读更多

有时候需要从properties文件中加载配置,以前的方式是这样的:

 

[html] view plaincopy
 
  1. <bean id="jdbcProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  2.     <property name="locations">  
  3.         <list>  
  4.             <value>classpath*:/spring/jdbc.properties</value>  
  5.         </list>  
  6.     </property>  
  7. </bean>  

最近发现这样也可以,代码更整洁:

 

 

[html] view plaincopy
 
  1. <context:property-placeholder location="classpath:spring/jdbc.properties" />  

在bean定义中依然可以通过“${}”这种方式来去值:

 

 

[html] view plaincopy
 
  1. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
  2.     <property name="driverClassName" value="${jdbc.driverClassName}" />  
  3.     <property name="url" value="${jdbc.url}" />  
  4.     <property name="username" value="${jdbc.username}" />  
  5.     <property name="password" value="${jdbc.password}" />  
  6.     <property name="initialSize" value="${jdbc.initialSize}" />  
  7.     <property name="maxActive" value="${jdbc.maxActive}" />  
  8.     <property name="maxIdle" value="${jdbc.maxIdle}" />  
  9.     <property name="minIdle" value="${jdbc.minIdle}" />  
  10. </bean>  

=======================================================================

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

    比如 :a、在开发阶段我们连接数据库时的连接url,username,password,driverClass等 

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

                  c、配置文件的位置

2.而这些参数在不同阶段之间又往往需要改变

    比如:在项目开发阶段和交付阶段数据库的连接信息往往是不同的,分布式应用也是同样的情况。

期望:能不能有一种解决方案可以方便我们在一个阶段内不需要频繁书写一个参数的值,而在不同阶段间又可以方便的切换参数配置信息

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

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

#jdbc配置

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属性,开发者能够控制这一行为。

分享到:
评论

相关推荐

    引入多个properties时.txt

    在SSM(Spring + SpringMVC + MyBatis)框架中,经常需要配置多个属性文件来管理各种配置信息。例如数据库连接信息、系统资源路径等。本文将详细探讨如何在SSM框架中引入多个`properties`文件,并解决可能出现的问题...

    java 获取properties的几种方式(csdn)————程序.pdf

    例如,Spring的`PropertyPlaceholderConfigurer`和`&lt;context:property-placeholder&gt;`适用于Spring应用,而`ResourceBundle`适合处理本地化,`Properties`类则是一个通用解决方案。理解并熟练掌握这些方法,将有助于...

    详解Spring加载Properties配置文件的四种方式

    在Spring XML配置文件中,可以使用context:property-placeholder标签来加载Properties配置文件。例如: ``` &lt;context:property-placeholder ignore-unresolvable="true" location="classpath:redis-key.properties"/...

    Maven项目中读取src/main/resources目录下的配置文件的方法

    Maven项目中读取src/main/resources目录下的配置文件...使用Java类可以使用`Properties`类来加载配置文件,而使用Spring框架可以使用`PropertyPlaceholderConfigurer`或`context:property-placeholder`来读取配置文件。

    spring无法读取properties文件数据问题详解

    &lt;context:property-placeholder ignore-unresolvable="true" location="classpath:/jdbc.properties, classpath*:/config.properties"/&gt; ``` 问题三:诊断问题 在诊断 Spring 无法读取 properties 文件数据...

    bboss ioc配置文件中使用外部属性文件介绍

    除了`&lt;property-placeholder&gt;`标签,BBoss还支持使用`&lt;context:property-placeholder&gt;`标签,它是Spring框架的一部分,也可以与BBoss集成使用。这种方式的配置类似,但提供了更多的选项,如默认值、忽略未定义的属性...

    说说在Spring中如何引用外部属性文件的方法

    除了使用 PropertyPlaceholderConfigurer 之外,我们还可以使用 context 命名空间来定义属性文件,相对于 PropertyPlaceholderConfigurer 的配置方式,这种方式更优雅。 ``` &lt;context:property-placeholder location...

    Spring中Properties的配置方式

    &lt;context:property-placeholder location="classpath:sys.properties" /&gt; ``` 2. 通过 @PropertySource 配置 如果我们想要消灭所有 xml 配置文件,可以使用 `@PropertySource` 注解: ```java @PropertySource(...

    详解五种方式让你在java中读取properties文件内容不再是难题

    在Spring配置文件中,可以通过`&lt;context:property-placeholder&gt;`标签来加载properties文件。例如,配置文件`jdbc.properties`位于类路径下,可以这样设置: ```xml &lt;context:property-placeholder location=...

    Spring中利用配置文件和@value注入属性值代码详解

    然后,我们可以使用&lt;context:property-placeholder&gt;标签来加载配置文件: ```xml &lt;context:property-placeholder location="classpath*:info/info.properties" /&gt; ``` 或者,我们可以使用标签来加载配置文件: ``...

    Spring Properties的使用和配置方法

    &lt;context:property-placeholder location="classpath:sys.properties" /&gt; ``` 使用 `@PropertySource` 注解可以配置 Properties: ```java @PropertySource("classpath:sys.properties") @Configuration public ...

    Spring通过c3p0配置bean连接数据库

    然后,在 Spring 配置文件中,我们可以使用 `PropertyPlaceholderConfigurer` 来加载外部配置文件: ```xml &lt;context:property-placeholder location="classpath:db.properties" /&gt; ``` 最后,我们可以在数据源 ...

    详解spring applicationContext.xml 配置文件

    4. `&lt;context:property-placeholder&gt;`:这是一个特殊的bean,用于加载外部属性文件(如`jdbc.properties`),使得在配置中可以使用`${}`引用这些属性,避免硬编码。 5. `&lt;dataSource&gt;`:这里配置了数据源,Druid是...

    Spring加载properties文件的方法

    在传统的Spring配置中,我们可以使用`&lt;context:property-placeholder&gt;`标签来加载properties文件。这个标签的`location`属性用于指定properties文件的路径。例如: ```xml &lt;context:property-placeholder location=...

    Spring项目application.xml配置文件加解密

    在Spring项目中,`application.xml`配置文件是核心配置组件,它包含了应用的bean定义、数据源、事务管理等重要信息。为了保护敏感信息,如数据库连接字符串、API密钥等,我们需要对这些配置进行加密。本文将详细介绍...

    Spring注解驱动开发实现属性赋值

    其中可以利用context命名空间下的property-placeholder标签加载外部属性文件,并通过value属性直接赋予值。例如,可以指定配置文件位置,并在bean定义中通过${}占位符引用配置文件中定义的属性值。 2. 基于注解的...

Global site tag (gtag.js) - Google Analytics