spring中context:property-placeholder解析

1.替代常量

应用场所:1在开发阶段我们连接数据库时的连接url,username,password,driverClass等

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

2.参数需经常变动

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

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

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

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

#jdbc配置

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/test

jdbc.username=root

jdbc.password=root

应用:

1.这样一来就可以为spring配置的bean的属性设置值了,比如alibaba有一个jdbc数据源的类DruidDataSource

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

<!-- 阿里巴巴数据源配置 -->
   <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
   		<property name="driverClassName">
   			<value>${jdbc.driverClassName}</value>
   		</property>
   		<property name="url">
   			<value>${jdbc.url}</value>
   		</property>
   		<property name="username">
   			<value>${jdbc.username}</value>
   		</property>
   		<property name="password">
   			<value>${jdbc.password}</value>
   		</property>
   		<!-- 连接池最大连接数 -->
   		<property name="maxActive">
   			<value>20</value>
   		</property>
   		<!-- 初始化连接大小 -->
   		<property name="initialSize">
   			<value>1</value>
   		</property>
   		<!-- 获取链接最大等待时间 -->
   		<property name="maxWait">
   			<value>60000</value>
   		</property>
   		<!-- 连接池最大空闲 -->
   		<property name="maxIdle">
   			<value>20</value>
   		</property>
   		<!-- 连接池最小空闲 -->
   		<property name="minIdle">
   			<value>3</value>
   		</property>
   		<!-- 自动清除无用连接 -->
   		<property name="removeAbandoned">
   			<value>true</value>
   		</property>
   		<!-- 自动清除无用连接等待时间 -->
   		<property name="removeAbandonedTimeout">
   			<value>180</value>
   		</property>
   		<!-- 连接属性 -->
   		<property name="connectionProperties">
   			<value>clientEncoding=UTF-8</value>
   		</property>
   </bean>

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

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

外在化应用参数的配置

在开发企业应用期间,或者在将企业应用部署到生产环境时,应用依赖的很多参数信息往往需要调整,比如LDAP连接、RDBMSJDBC连接信息。对这类信息进行外在化管理显得格外重要。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. <bean name="userInfo" class="test.UserInfo">
  11. <property name="username" value="${db.username}"/>
  12. <property name="password" value="${db.password}"/>
  13. </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属性,开发者能够控制这一行为。

spring中context:property-placeholder解析

时间: 2024-11-13 02:01:02

spring中context:property-placeholder解析的相关文章

spring中 context:property-placeholder 导入多个独立的 .properties配置文件

spring中 context:property-placeholder 导入多个独立的 .properties配置文件? Spring容器采用反射扫描的发现机制,在探测到Spring容器中有一个 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer的 Bean就会停止对剩余PropertyPlaceholderConfigurer的扫描(Spring 3.1已经使用PropertySourcesPlaceh

spring中context:property-placeholder/元素 转载

spring中context:property-placeholder/元素  转载 1.有些参数在某些阶段中是常量 比如 :a.在开发阶段我们连接数据库时的连接url,username,password,driverClass等 b.分布式应用中client端访问server端所用的server地址,port,service等 c.配置文件的位置 2.而这些参数在不同阶段之间又往往需要改变 比如:在项目开发阶段和交付阶段数据库的连接信息往往是不同的,分布式应用也是同样的情况. 期望:能不能有一

spring中 context:property-placeholder 导入多个独立的配置文件

spring中 context:property-placeholder 导入多个独立的 .properties配置文件? Spring容器采用反射扫描的发现机制,在探测到Spring容器中有一个 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer的 Bean就会停止对剩余PropertyPlaceholderConfigurer的扫描(Spring 3.1已经使用PropertySourcesPlaceh

spring中context:property-placeholder/元素

http://blog.sina.com.cn/s/blog_4550f3ca0100ubmt.html 1.有些参数在某些阶段中是常量 比如 :a.在开发阶段我们连接数据库时的连接url,username,password,driverClass等 b.分布式应用中client端访问server端所用的server地址,port,service等 c.配置文件的位置 2.而这些参数在不同阶段之间又往往需要改变 比如:在项目开发阶段和交付阶段数据库的连接信息往往是不同的,分布式应用也是同样的情况

Spring中管理Bean以及解析XML

Spring是分层的轻量级框架 以IoC(Inverse of Control 反转控制)和AOP(Aspect Oriented Programming 面向切面编程)为核心 应用Spring的好处: 方便解耦,简化开发 Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理 AOP编程的支持 Spring提供面向切面编程,可以方便的实现对程序进行权限拦截.运行监控等功能 声明式事务的支持 只需要通过配置就可以完成对事务的管理,而无需手动编程 方便集成各种优秀框架

关于spring中&lt;context:annotation-config/&gt;配置

在spring的配置文件中,如果我们一个一个地配置bean会非常麻烦,因此我们可以使用注解的方式 使用@Autowired注解,必须事先在Spring容器中声明AutowiredAnnotationBeanPostProcessor的Bean: 使用 @Required注解,就必须声明RequiredAnnotationBeanPostProcessor的Bean 类似地,使用@Resource.@PostConstruct.@PreDestroy等注解就必须声明 CommonAnnotatio

Spring中property-placeholder的使用与解析

Spring中property-placeholder的使用与解析 我们在基于spring开发应用的时候,一般都会将数据库的配置放置在properties文件中. 代码分析的时候,涉及的知识点概要: NamespaceHandler 解析xml配置文件中的自定义命名空间 ContextNamespaceHandler 上下文相关的解析器,这边定义了具体如何解析property-placeholder的解析器 BeanDefinitionParser 解析bean definition的接口 Be

spring加载配置文件无法解析占位符问题:Could not resolve placeholder &#39;from&#39; in string value &quot;${from}&quot;

Could not resolve placeholder 'from' in string value "${from}" 解决: 在spring的xml配置文件中当有多个*.properties文件需要加载时, 应当集中在一个xml文件中加载,建议在主xml文件中加载,即(applicationContext.xml)中加载, 这样就不需要关注 子xml文件 与 *.properties 加载顺序问题 加载多个*.properties文件,以','隔开 <context:pr

spring中解析xml

解析xml有SAX,Stax,dom等方式,那么spring中是如何解析xml文件的呢? Document doc = this.documentLoader.loadDocument( inputSource, getEntityResolver(), this.errorHandler, validationMode, isNamespaceAware()); spring中采用的DOM的方式,所要做的一切就是得到org.w3c.dom.Document对象 上面的documentLoade