文档章节

Spring里PropertyPlaceholderConfigurer类的使用

城固如春
 城固如春
发布于 2017/02/15 10:25
字数 723
阅读 15
收藏 1

这个类是用来解析Java Properties属性文件值,并提供在spring配置期间替换使用属性值。以下是它的三种常见使用方法。

(1).基本的使用方法:
spring-config.xml 
<beanid="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>classpath:/spring/include/dbQuery.properties</value>
    </property>
</bean>
其中classpath是引用src目录下的文件写法。

(2).当存在多个Properties文件时,配置就需使用locations了:
spring-config.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>
        </list>
    </property>
</bean>

(3).接下来我们要使用多个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。

Spring的框架中为您提供了一个 BeanFactoryPostProcessor 的类: org.springframework.beans.factory.config.PropertyPlaceholderConfigurer。通过这个类,您可以将一些组态设定,移出至.properties文件中,而.properties文件可以作为客户根据需求,自定义一些相关的参数。
来看一个Bean定义档的实际例子:

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:p="http://www.springframework.org/schema/p"  
  5.     xmlns:context="http://www.springframework.org/schema/context"  
  6.     xmlns:aop="http://www.springframework.org/schema/aop"  
  7.     xsi:schemaLocation="  
  8.         http://www.springframework.org/schema/beans  
  9.         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  10.         http://www.springframework.org/schema/context  
  11.         http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  12.         http://www.springframework.org/schema/aop   
  13.         http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">  
  14.       
  15.     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  16.         <property name="fileEncoding" value="GBK" />   
  17.         <property name="locations">  
  18.             <list>  
  19.                 <value>classpath:mailsender.properties</value>  
  20.             </list>  
  21.         </property>  
  22.     </bean>  
  23.     <bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl" >  
  24.         <property name="host">  
  25.             <value>${mail.host}</value>  
  26.         </property>  
  27.         <property name="port">  
  28.             <value>${mail.port}</value>  //获取了.property的属性,可以用$符号获取相应的值
  29.         </property>  
  30.         <property name="javaMailProperties">  
  31.             <props>  
  32.               <prop key="mail.smtp.auth">false</prop>  
  33.               <prop key="mail.smtp.timeout">25000</prop>  
  34.             </props>  
  35.         </property>     
  36.         <property name="username">  
  37.             <value>${mail.username}</value>  
  38.         </property>  
  39.         <property name="password">  
  40.             <value>${mail.password}</value>  
  41.         </property>  
  42.     </bean>  
  43. </beans>  

这是一个发送邮件的demo(但这篇文章主旨不在讲述怎么发送邮件,而是将这个拿出来做为例子),
在mailSender中有许多依赖注入的属性,这些都是比较不常变动的属性,但是他的值可能经常会要变动,有时客户需求需要改变,可以透过mailsender.properties来简单的设定,而这个信息已设定在location属性中: 

  • mail.transport.protocol=smtp
    mail.host=stmp.qq.com
    mail.port=25
    mail.username=xxxxxxxx@qq.com
    mail.password=xxxxxxxx

通过你配置了PropertyPlaceholderConfigurer这个bean,就可以动态的获取这些。properties文件里的属性了,这样对于经常需要变动的配置文件来说就显的很方便了。
如果有多个.properties文件,则可以透过  locations   属性来设定,

  • <property name="locations">
    <list>
    <value>classpath:mailsender1.properties</value>
  •     <value>classpath:mailsender2.properties</value>
    </list>
    </property>

© 著作权归作者所有

共有 人打赏支持
上一篇: 见闻
城固如春
粉丝 11
博文 187
码字总数 25379
作品 0
杭州
程序员
私信 提问
Spring Container的扩展点

Spring在解析完配置文件后,会调用一些callback方法,使用Spring的开发者可以通过提供这些callback方法达到对Spring Container的扩展. 1,通过实现BeanPostProcessor来完成对某些Bean的一些'定制...

晨曦之光
2012/04/25
440
0
扩展PropertyPlaceholderConfigurer

扩展PropertyPlaceholderConfigurer 要Spring配置时,将一些重要的信息独立到属性文件中是比较常见的做法,Spring只支持明文存放的属性文件,在某些场合下,我们可以希望对属性文件加密保存,...

blooms
2012/10/27
0
0
spring中context:property-placeholder/元素

1.有些参数在某些阶段中是常量 比如:a、在开发阶段我们连接数据库时的连接url,username,password,driverClass等 b、分布式应用中client端访问server端所用的server地址,port,service等...

Megan_zhou
2014/09/18
0
0
Spring的PropertyPlaceholderConfigurer应用

Spring 利用PropertyPlaceholderConfigurer占位符 1. PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现,也就是BeanFactoryPostProcessor接口的一个实现。PropertyPlaceholderCo...

java远
2013/11/28
0
0
Spring里PropertyPlaceholderConfigurer类的使用

这个类是用来解析Java Properties属性文件值,并提供在spring配置期间替换使用属性值。以下是它的三种常见使用方法。 (1).基本的使用方法: spring-config.xml <bean id="propertyConfigurer...

ikkyuuC
2012/11/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【PG内核】pg11秒级新增非空默认字段的实现方法

pg11新特性,可以瞬间向一个表中添加非空默认字段。 今天研究了一下这个特性的内核实现方式,写个博客简单记录一下。 结论奉上 pg在从硬盘或者内存获取到一条数据记录后(以下称tuple),会使...

movead
25分钟前
2
0
如何保证MongoDB的安全性?

上周写了个简短的新闻《MongoDB裸奔,2亿国人求职简历泄漏!》: 根据安全站点HackenProof的报告,由于MongoDB数据库没有采取任何安全保护措施,导致共计202,730,434份国人求职简历泄漏。 然...

Fundebug
31分钟前
1
0
KVM

目录 (1):简介及安装 1. KVM 介绍 1.0 虚拟化简史 1.1 KVM 架构 2. KVM 的功能列表 3. KVM 工具集合 4. RedHat Linux KVM 安装 4.1 在安装 RedHat Linux 时安装 KVM 4.2 在已有的 RedHat...

临江仙卜算子
46分钟前
0
0
脚本配置java开发环境

@echo off&setlocal enabledelayedexpansion cls @echo "This script is used to registe envionment variables......" @echo. @echo. @echo. set var=%~dp0 set var=%var:~,-1% @echo "regi......

默克鱼
今天
1
0
c++中友元函数理解与使用

在学习c++这一块,关于友元函数和友元类,感觉还是不好理解,但是井下心来,理解,需要把我一下几点。 首先讲友元函数。 (1)友元函数: 1)C++中引入友元函数,是为在该类中提供一个对外(除...

天王盖地虎626
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部