Spring PropertyPlaceholderConfigurer

PropertyPlaceholderConfigurer是BeanFactoryPostProcessor的子类。

通常情况下,我们不想将类似于系统管理相关的信息同业务对象相关的配置信息混杂到XML配置文件中,以免部署或维护期间因为改动复杂的XML配置文件而出现问题。我们会将一些数据库连接信息、邮件服务器等相关信息单独配置到一个properties文件中,这样,如果因系统资源变动的话,只需要关注这些简单的properties配置文件即可。

PropertyPlaceholderConfigurer允许我们在XML配置文件中使用占位符,并将这些占位符所代表的资源单独配置到简单的properties文件中加载。以数据库的配置为例,使用了PropertyPlaceholderConfigurer之后,可以在XML配置文件中使用占位符配置数据源,而不用将连接地址、用户名和密码等都配置到XML中。

XML配置示例如下:

 1 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
 2     <property name="url">
 3         <value>${jdbc.url}</value>
 4     </property>
 5     <property name="driverClassName">
 6         <value>${jdbc.driver}</value>
 7     </property>
 8     <property name="username">
 9         <value>${jdbc.username}</value>
10     </property>
11     <property name="password">
12         <value>${jdbc.password}</value>
13     </property>
14     <property name="testOnBorrow">
15         <value>true</value>
16     </property>
17     <property name="testOnReturn">
18         <value>true</value>
19     </property>
20     <property name="testWhileIdle">
21         <value>true</value>
22     </property>
23     <property name="minEvictableIdleTimeMillis">
24         <value>180000</value>
25     </property>
26     <property name="timeBetweenEvictableRunsMillis">
27         <value>360000</value>
28     </property>
29     <property name="validationQuery">
30         <value>SELECT 1</value>
31     </property>
32     <property name="maxActive">
33         <value>100</value>
34     </property>
35 </bean>

现在所有这些占位符所代表的资源,都放到了jdbc.properties文件中,如下所示:

jdbc.url = jdbc:mysql://server/MAIN?useUnicode=true&amp;characterEncoding=ms92&amp;failOverReadOnly=false&amp;roundRobinLoadBalance=true
jdbc.driver = com.musql.jdbc.Driver
jdbc.username = your username
jdbc.password = your password

BeanFactory在第一阶段加载完成所有配置信息时,BeanFactory中保存的对象的属性信息还只是以占位符的形式存在。当其进入容器实现的第二阶段实例化bean时,bean定义中的属性值将被properties文件中的配置信息所替换。

PropertyPlaceholderConfigurer不单会从其配置的properties文件中加载配置项,同时还会检查Java的System类中的Properties,可以通过setSystemPropertieMode()或者setSystemPropertiesModeName()来控制是否加载或覆盖System相应Properties的行为。PropertiesPlaceholderConfigurer提供了SYSTEM_PROPERTIES_MODE_FALLBACK、SYSTEM_PROPERTIES_MODE_NEVER和SYSTEM_PROPERTIES_MODE_OVERRIDE三种模式。默认采用的是SYSTEM_PROPERTIES_MODE_FALLBACK,即如果properties配置文件中找不到相应的配置项,则到System的Properties中查找,我们还可以选择不检查System的Properties或者覆盖它。

本文摘抄自《Spring 揭秘》。

时间: 2024-08-10 15:13:19

Spring PropertyPlaceholderConfigurer的相关文章

spring PropertyPlaceholderConfigurer 找不到配置文件原因

1:  spring 版本问题 参见: http://www.cnblogs.com/alex-blog/archive/2012/12/25/2832357.html 2: bean id 同名  看看工程中引入的其他配置文件是否也是configBean 建议不同工程 不同id 名 <bean id="configBean" class="org.springframework.beans.factory.config.PropertyPlaceholderConfi

osgi与流行的框架(spring,struts,hibernate等)的集成

1.与流行的 JAVA B/S体系架构的集成 了解了基于osgi系统设计的基本思想,进一步来研究osgi与流行的框架(spring,struts,hibernate等)的集成,这里首先讲解一下集成原理. l        解决和spring的集成 由于spring的应用占据了大部分的java应用领域,所以解决与spring的集成是osgi必须解决的,spring-dm的推出大大促进了两者的结合,有助于osgi进军企业领域. Spring所带来得好处主要有这么两点: 1.       不需要对外的

【Todo】Spring的学习(IoC)等

下面这个系列是非常好的例子: http://www.yiibai.com/spring/spring-3-hello-world-example.html 正在看,把一些基础夯实. Spring教程 Spring hello world实例 Spring松耦合实例 Spring JavaConfig实例 Spring JavaConfig @Import实例 Spring依赖注入(DI) Spring使用Setter依赖注入 Spring通过构造方法依赖注入 Spring Bean引用例子 如何

分布式系统JVM本地缓存同步实现dlcache

现成的分布式K/V缓存已经有很多的实现,最主要的比如redis,memcached.那为什么我们还要自己去实现呢,在我们解决了分布式系统下大量rpc调用导致的高延时后,我们发现很多服务需要大量的访问分布式缓存,由于分布式缓存通常部署在单独的服务器中,在lan中,通常单次网络也需要1ms,一个请求少的可能需要一两次缓存访问,复杂的服务比如委托.出入金.融资等会访问一二十次,即使程序已经优化,但仅访问分布式缓存花费的网络延时占据了整个响应时间的很大一部分比例,而这些需要广泛被访问的数据通常数据量本身

zookeeper配置文件共享中心

最近频繁的系统上线,每次打包都要把配置文件替换为正式环境的配置文件,虽然说就是复制粘贴的事,架不住文件杂乱,而且多. 期初的想法是有没有办法将配置文件与系统隔离开来,这样在更新时候,就只需要更新代码部分,配置文件不用去管了.查了不少资料,没找到什么好的实现方式,别人比较好的发布框架都是自己写的,也用了,干脆自己研究研究能不能使用zk做一个配置文件的管理中心,顺带实现动态加载配置文件而不需要重启系统(正式环境这种情况使用的应该很少,不过本地倒是用起来顺手很多). 1,在虚拟机上安装zk(需先安装j

Spring的PropertyPlaceholderConfigurer应用

转载地址:http://www.cnblogs.com/yl2755/archive/2012/05/06/2486752.html Spring 利用PropertyPlaceholderConfigurer占位符 1. PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现,也就是 BeanFactoryPostProcessor接口的一个实现.PropertyPlaceholderConfigurer可以将上下文(配置文 件)中的属性值放在另一个单独的标

使用 Spring Boot 快速构建 Spring 框架应用,PropertyPlaceholderConfigurer

Spring 框架对于很多 Java 开发人员来说都不陌生.自从 2002 年发布以来,Spring 框架已经成为企业应用开发领域非常流行的基础框架.有大量的企业应用基于 Spring 框架来开发.Spring 框架包含几十个不同的子项目,涵盖应用开发的不同方面.如此多的子项目和组件,一方面方便了开发人员的使用,另外一个方面也带来了使用方面的问题.每个子项目都有一定的学习曲线.开发人员需要了解这些子项目和组件的具体细节,才能知道如何把这些子项目整合起来形成一个完整的解决方案.在如何使用这些组件上

Spring属性占位符PropertyPlaceholderConfigurer的使用

1.一个简单的Demo 1.1.创建conf.xml <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans>    <bean id="

spring的多个PropertyPlaceholderConfigurer实例装配的问题

1. 默认情况下,使用PropertyPlaceholderConfigurer多实例装配出现异常 在项目中尝试 在不同的spring的配置文件中分别引入相应的properties文件,这样会在spring配置文件中配置多个PropertyPlaceholderConfigurer实例,但是这样使用的话就会出现key找不到的问题,异常信息如下: " Could not resolve placeholder 'key2" 信息: Destroying singletons in org