`
tangwenchao86
  • 浏览: 378693 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Spring 利用PropertyPlaceholderConfigurer占位符

 
阅读更多

1.Spring的框架中,org.springframework.beans.factory.config.PropertyPlaceholderConfigurer类可以将.properties(key/value形式)文件中一些动态设定的值(value),在XML中替换为占位该键($key$)的值,.properties文件可以根据客户需求,自定义一些相关的参数,这样的设计可提供程序的灵活性。

2.在Spring中,使用PropertyPlaceholderConfigurer可以在XML配置文件中加入外部属性文件,当然也可以指定外部文件的编码,如:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
      <value>conf/sqlmap/jdbc.properties</value>
    </property>
     <property name="fileEncoding">
       <value>UTF-8</value>
     </property>
</bean>
当然也可以引入多个属性文件,如:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   <property name="locations">
    <list>
     <value>/WEB-INF/mail.properties</value>   
     <value>classpath: conf/sqlmap/jdbc.properties</value>//注意这两种value值的写法
    </list>
   </property>
</bean>

基本的使用方法是:

Xml代码
<bean id="propertyConfigurerForAnalysis" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>classpath:/spring/include/dbQuery.properties</value>
    </property>
    <property name="fileEncoding">
       <value>UTF-8</value>
     </property>

</bean>

其中classpath是引用src目录下的文件写法。



当存在多个Properties文件时,配置就需使用locations了:

Xml代码
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
       <list>
          <value>classpath:/spring/include/jdbc-parms.properties</value>
          <value>classpath:/spring/include/base-config.properties</value>
          <value>classpath*:config/jdbc.properties</value>
        </list>
    </property>
</bean>



接下来我们要使用多个PropertyPlaceholderConfigurer来分散配置,达到整合多工程下的多个分散的Properties文件,其配置如下
Xml代码

<bean id="propertyConfigurerForProject1" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="order" value="1" />
    <property name="ignoreUnresolvablePlaceholders" value="true" />
    <property name="location">
       <value>classpath:/spring/include/dbQuery.properties</value>
    </property>
</bean>



Xml代码

<bean id="propertyConfigurerForProject2" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="order" value="2" />
    <property name="ignoreUnresolvablePlaceholders" value="true" />
    <property name="locations">
      <list>
        <value>classpath:/spring/include/jdbc-parms.properties</value>
        <value>classpath:/spring/include/base-config.properties</value>
      </list>
    </property>
</bean> 其中order属性代表其加载顺序,而ignoreUnresolvablePlaceholders为是否忽略不可解析的Placeholder,如配置了多个PropertyPlaceholderConfigurer,则需设置为true



3.譬如,jdbc.properties的内容为:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/mysqldb?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=round;
jdbc.username=root
jdbc.password=123456

4.那么在spring配置文件中,我们就可以这样写:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   <property name="locations">
    <list>
     <value>classpath: conf/sqlmap/jdbc.properties </value>
    </list>
   </property>
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
   <property name="driverClassName" value="${jdbc.driverClassName}" />
   <property name="url" value="${jdbc.url}" />
   <property name="username" value="${jdbc.username}" />
   <property name="password" value="${jdbc.password}" />
</bean>


5.这样,一个简单的数据源就设置完毕了。可以看出:PropertyPlaceholderConfigurer起的作用就是将占位符指向的数据库配置信息放在bean中定义的工具。




<!-- dataSource -->
<bean id="dataSource"
   class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName"
    value="${jdbc.driverClassName}" />
   <property name="url" value="${jdbc.url}" />
   <property name="username" value="${jdbc.username}" />
   <property name="password" value="${jdbc.password}" />
</bean>
<!-- sessionFactory -->
<bean id="sessionFactory"
   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
   <property name="dataSource" ref="dataSource" />
   <property name="mappingResources">
    <list>
     <value>cn/xg/hibernate/spring/User.hbm.xml</value><!--这里的映射路径问题,这种方法只能一个一个加-->
     <value>cn/xg/hibernate/spring/Group.hbm.xml</value>
    </list>
    <!-- 加载一个路径下的*.hbm.xml文件方法:
     <property name="mappingDirectoryLocations">
     <list>
     <value>classpath:/cn/xg/spring/model</value>
     </list>
     </property>
    -->
   </property>
   <property name="hibernateProperties">
    <props>
     <prop key="hibernate.dialect">
      ${hibernate.dialect}
     </prop>
     <prop key="hibernate.show_sql">true</prop>
    </props>
   </property>
</bean>
<!-- DAO实现类extends HibernateDaoSupport,注入sessionFactory -->
<bean id="userMgrImpl" class="cn.xg.hibernate.spring.UserMgrImpl">
   <property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="groupMgrImpl"
   class="cn.xg.hibernate.spring.GroupMgrImpl">
   <property name="sessionFactory" ref="sessionFactory" />
   <property name="userImpl" ref="userMgrImpl"/>
   <property name="transactionTemplate" ref="transactionTemplate"/>
</bean>
<!-- 事务管理 -->
<bean id="transactionManager"
   class="org.springframework.orm.hibernate3.HibernateTransactionManager">
   <property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 编程式事务的写法 :向Dao实现类中注入transactionTemplate,调动其execute()方法,接口回调new TransactionCallback()-->
<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
   <property name="transactionManager" ref="transactionManager"/>
</bean>


<!-- 声时式事务第一种写法 -->
<!--
   <bean id="groupMgr"
   class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
   <property name="transactionManager" ref="transactionManager" />
   <property name="target" ref="groupMgrImpl" />
   <property name="transactionAttributes">
   <props>
   <prop key="add*">PROPAGATION_REQUIRED</prop>
   <prop key="get*">PROPAGATION_REQUIRED</prop>
   <prop key="*">readOnly</prop>
   </props>
   </property>
   </bean>
--> 
<!-- 声时式事务第二种写法 -->
<!-- 事务的传播特性

<tx:advice id="txAdvice">
   <tx:attributes>
    <tx:method name="add*" propagation="REQUIRED" />
    <tx:method name="get*" propagation="REQUIRED" />
    <tx:method name="*" read-only="true" />
   </tx:attributes>
</tx:advice>
<aop:config>
   <aop:advisor pointcut="execution(* cn.xg.hibernate.spring.*.*(..))"
    advice-ref="txAdvice" />
</aop:config>
-->

</beans>

jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/数据库名
jdbc.username=数据库用户名
jdbc.password=数据库密码
hibernate.dialect=org.hibernate.dialect.MySQLDialect(方言.这里是MySql)





参考文章:
http://hi.baidu.com/seashell752/blog/item/2764310e2f35f2e137d1225f.html
http://hi.baidu.com/suny_duan/blog/item/e8e9b2a5f31d5efc9052ee8b.html
分享到:
评论

相关推荐

    Spring属性占位符PropertyPlaceholderConfigurer的使用

    在Spring框架中,属性占位符`PropertyPlaceholderConfigurer`是一个重要的工具,用于处理配置文件中的属性值引用。它使得我们可以在XML配置文件中使用占位符`${...}`来引用外部属性文件中的值,从而使应用配置更加...

    属性占位符配置器

    **属性占位符配置器**主要通过`org.springframework.beans.factory.config.PropertyPlaceholderConfigurer`类来实现。该类作为Spring的容器后处理器,在应用程序上下文初始化阶段自动读取指定的属性文件,并将其中的...

    Spring及Mybatis整合占位符解析失败问题解决

    Spring及Mybatis整合占位符解析失败问题解决 Spring framework和Mybatis是两个非常popular的Java框架,前者是一个基于Java的开源框架,提供了一个通用的编程模型和配置机制,可以帮助开发者快速开发企业级应用程序...

    Spring PropertyPlaceholderConfigurer配置文件加载器集成ZooKeeper来实现远程配置读取

    在Spring中,`PropertyPlaceholderConfigurer`是一个非常重要的类,它用于处理属性文件中的占位符,将它们替换为实际的值。这在配置管理中起到了关键作用,特别是在大型分布式系统中,动态配置管理变得尤为重要。...

    .properties文件读取及占位符${...}替换源码解析

    PropertyPlaceholderConfigurer 是 Spring 框架中的一个类,用于读取.properties文件并将占位符${...}替换为实际的配置信息。 例如,下面是一个使用 PropertyPlaceholderConfigurer 实现占位符${...}替换的示例代码...

    Spring实战之属性占位符配置器用法示例

    Spring框架中提供了属性占位符配置器(PropertyPlaceholderConfigurer),用于读取外部属性文件,并将其设置为Spring配置文件的数据。本文将详细介绍Spring实战之属性占位符配置器用法示例,结合实例形式分析了...

    org.springframework.beans.factory.config.PropertyPlaceholderConfigurer

    `org.springframework.beans.factory.config.PropertyPlaceholderConfigurer` 是Spring框架中的一个重要组件,主要负责处理配置文件中的占位符替换。这个类是Spring在初始化bean时用来解析和注入环境变量或系统属性...

    关于spring系统中多系统的配置

    在Spring框架中,`PropertyPlaceholderConfigurer`是一种特殊的Bean,它被用来处理Spring配置文件中的占位符(placeholder),并将它们替换为具体的值。这些值通常来自外部的属性文件,如`.properties`或`.xml`等。...

    服务器扩展:添加服务器占位符

    Spring允许我们在配置文件中使用 `${...}` 来引用占位符,然后通过PropertyPlaceholderConfigurer 或者 @Value 注解来解析这些占位符,并在运行时替换为实际值。 例如,如果你有一个名为 `application.properties` ...

    SPRING:bean配置properties

    在Spring框架中,Bean的配置与管理是其核心功能之一,而通过`PropertyPlaceholderConfigurer`进行属性占位符的配置则是实现动态配置的关键技术。本文将深入解析如何利用`PropertyPlaceholderConfigurer`进行bean配置...

    第十九章 Spring Environment 抽象(Environment Abstraction)1

    在Spring 3.1之前,占位符处理主要由`PropertyPlaceholderConfigurer`完成,而在3.1及以后版本,这个功能被`PropertySourcesPlaceholderConfigurer`和`EmbeddedValueResolver`接口接管,使得处理更加灵活和高效。...

    spring2.5 配置VM

    `PropertyPlaceholderConfigurer`允许我们在XML配置文件中使用 `${property}` 形式的占位符,这些占位符的值会在运行时被VM参数或系统属性替换。 例如,我们可以在XML配置中这样使用: ```xml ...

    Spring动态加载配置文件

    1. `PropertyPlaceholderConfigurer`: 这个类可以解析包含占位符(如`${property}`)的bean定义,并替换为属性文件中的相应值。我们可以通过`locations`属性指定一个或多个属性文件的位置,Spring会在启动时加载这些...

    spring

    - **PropertyPlaceholderConfigurer** 和 **PropertyOverrideConfigurer**:用于在运行时动态替换Bean配置中的占位符。 ### 结论 Spring框架以其强大的功能和灵活性,成为Java企业级应用开发的首选框架之一。通过...

    在Spring中使用加密外部属性文件

    这些信息通常存储在`.properties`文件中,并通过占位符`${}`引用到Spring配置文件中。然而,对于敏感信息,如密码、API密钥等,直接明文存储在属性文件中存在安全风险。为了保护这些数据,我们需要采取加密措施。 ...

    Spring 2企业应用开发[配套源代码]

    Spring框架允许使用`PropertyPlaceholderConfigurer`来替换配置文件中的占位符,例如`${database.url}`,这样可以实现环境间的配置隔离,方便在开发、测试和生产环境之间切换。 3. `applicationContext.xml`:这是...

    基于Spring2.0的Property OverrideConfig Demo

    - Spring 2.0引入了`PropertyPlaceholderConfigurer`,用于处理配置文件中的占位符,例如`${property_name}`。它会查找指定的属性源(如`application.properties`),并替换这些占位符。 - `...

    spring工程需要的四个核心jar包之beans包

    - 在"beans"包中,`org.springframework.beans.factory.config`包下的`PropertyPlaceholderConfigurer`类用于处理占位符替换,实现环境变量或属性文件的值注入到Bean的属性中。 3. **Bean的生命周期管理** - ...

    spring-reference

    `PropertyPlaceholderConfigurer`是一个BeanFactoryPostprocessor,用于在运行时替换配置文件中的占位符。 ##### 3.8.2 PropertyOverrideConfigurer `PropertyOverrideConfigurer`也是BeanFactoryPostprocessor的一...

    基于Spring2.0 Property Placeholder配置的源码例子

    Spring 2.0引入了`PropertyPlaceholderConfigurer`类,它是一个Bean工厂后处理器,负责在Bean定义中替换以`${...}`形式的占位符为实际的属性值。这些属性通常来自一个或多个`.properties`文件,可以是classpath下的...

Global site tag (gtag.js) - Google Analytics