`
qtlkw
  • 浏览: 307099 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Property Placeholder

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

   
<bean id="jdbcProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="locations">  
            <list>  
                <value>classpath*:/spring/jdbc.properties</value>  
            </list>  
        </property>  
    </bean>  



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

 
  <context:property-placeholder location="classpath:spring/jdbc.properties" />
 


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

   
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
        <property name="driverClassName" value="${jdbc.driverClassName}" />  
        <property name="url" value="${jdbc.url}" />  
        <property name="username" value="${jdbc.username}" />  
        <property name="password" value="${jdbc.password}" />  
        <property name="initialSize" value="${jdbc.initialSize}" />  
        <property name="maxActive" value="${jdbc.maxActive}" />  
        <property name="maxIdle" value="${jdbc.maxIdle}" />  
        <property name="minIdle" value="${jdbc.minIdle}" />  
    </bean> 


除去properites文件路径错误、拼写错误外,出现"Could not resolve placeholder"很有可能是使用了多个PropertyPlaceholderConfigurer或者多个<context:property-placeholder>的原因。



  比如我有一个dao.xml读取dbConnect.properties,还有一个dfs.xml读取dfsManager.properties,然后web.xml统一load这两个xml文件
Xml代码  收藏代码

    <context-param> 
            <param-name>contextConfigLocation</param-name> 
            <param-value> 
                    WEB-INF/config/spring/dao.xml,  
                    WEB-INF/config/spring/dfs.xml 
            </param-value> 
    </context-param> 

如果这两个xml文件中分别有
Xml代码  收藏代码

    <!-- dao.xml --> 
    <context:property-placeholder location="WEB-INF/config/db/dbConnect.properties" /> 
     
    <!-- dfs.xml --> 
    <context:property-placeholder location="WEB-INF/config/dfs/dfsManager.properties" /> 

那么,一定会出"Could not resolve placeholder"。



  一定要记住,不管是在一个Spring文件还是在多个Spring文件被统一load的情况下,直接写
Xml代码  收藏代码

    <context:property-placeholder location="" /> 
    <context:property-placeholder location="" />  

是不允许的。



解决方案:

  (1) 在Spring 3.0中,可以写:

    <context:property-placeholder location="xxx.properties" ignore-unresolvable="true" 
    /> 
    <context:property-placeholder location="yyy.properties" ignore-unresolvable="true" 
    /> 

注意两个都要加上ignore-unresolvable="true",一个加另一个不加也是不行的



  (2) 在Spring 2.5中,<context:property-placeholder>没有ignore-unresolvable属性,此时可以改用PropertyPlaceholderConfigurer。其实<context:property-placeholder location="xxx.properties" ignore-unresolvable="true" />与下面的配置是等价的
Java代码  收藏代码

    <bean id="随便" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
        <property name="location" value="xxx.properties" /> 
        <property name="ignoreUnresolvablePlaceholders" value="true" />  
    </bean> 

  正因为如此,写多个PropertyPlaceholderConfigurer不加ignoreUnresolvablePlaceholders属性也是一样会出"Could not resolve placeholder"。



  虽然两者是的等价的,但估计大家还是喜欢写<context:property-placeholder>多一些,毕竟简单一些嘛。所以如果是Spring 3.0,直接用解决方案(1)再简单不过了;如果是Spring 2.5,需要费点力气改写成PropertyPlaceholderConfigurer
分享到:
评论

相关推荐

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

    在Spring框架中,Property Placeholder是用于管理应用配置属性的一个强大工具。这个例子“基于Spring 2.0 Property Placeholder配置的源码”展示了如何在应用程序中使用Property Placeholder来动态加载和替换配置...

    SSH笔记-通过property-placeholder使用外部属性文件

    本笔记将专注于Spring框架中的一个关键特性——通过`property-placeholder`使用外部属性文件,这在实际项目中非常常见,能够有效地实现配置的解耦和管理。 首先,让我们理解`property-placeholder`的概念。在Spring...

    context:property-placeholder 和util:properties

    context:property-placeholder 和util:properties 博客:https://blog.csdn.net/u010476739/article/details/76735527

    Spring中property-placeholder的使用与解析详解

    Spring 中 property-placeholder 的使用与解析详解 -property-placeholder 是 Spring 框架中的一种机制,用于加载和解析 properties 文件中的配置信息。在本文中,我们将详细介绍 property-placeholder 的使用和...

    Spring整合Mybatis使用&lt;context:property-placeholder&gt;时的坑

    5. 使用Spring的`PropertySourcesPlaceholderConfigurer`代替`&lt;context:property-placeholder&gt;`,它提供了更多的灵活性和控制,比如可以配置多个`PropertySource`,分别对应不同的属性文件。 6. 确认Spring配置文件...

    属性占位符配置器

    在Spring框架中,**属性占位符配置器**(Property Placeholder Configurator)是一种强大的配置工具,它允许开发者在配置文件中使用占位符来引用外部属性文件中的值,从而实现了配置的动态化和灵活性。这一特性在处理...

    spring-reference.pdf

    - **Property Placeholder Configuration**:支持外部配置文件的占位符替换。 - **Custom Property Editors**:注册自定义的PropertyEditor,用于类型转换。 #### 五、Spring框架的高级特性 - **...

    UITextView增加PlaceHolder

    @property (nonatomic, strong) NSString *placeholder; @property (nonatomic, strong) UIColor *placeholderColor; @end // UITextView+PlaceHolder.m #import "UITextView+PlaceHolder.h" @implementation ...

    UITextView+Placeholder.zip

    @import UIKit; FOUNDATION_EXPORT double UITextView_...@property (nonatomic, copy) NSString *placeholder; /* 占位文字颜色 */ @property (nonatomic, strong) UIColor *placeholderColor; @end

    spring-security-saml-onelogin:一个用于与OneLogin IDP进行Spring Security SAML集成的插件

    应该使用Spring的Property Placeholder Configurer解析以下属性 org.onelogin.saml.idp.metadata.file = IDP元数据XML文件的路径 org.onelogin.saml.idp.url = IDP启动的SSO URL org.onelogin.idp

    jQuery实现的一个自定义Placeholder属性插件

    - `supportProperty(nodeType, property)`: 这个方法用于检测浏览器是否支持某个特定的属性。 - `getPositionInDoc(target, parent)`: 此方法用于获取对象在文档中的位置。 - `$c`: 是一个快速创建DOM对象的方法。 ...

    ios-带placeholder的textView.zip

    在这个自定义TextView中,我们可能会看到如`@property (nonatomic, strong) NSString *placeholder;`这样的声明,用于存储占位符文本,以及可能的方法如`- (void)setPlaceholder:(NSString *)placeholder;`用于设置...

    MyBatis异常-Property 'configLocation' not specified, using default MyBatis Configuration

    在这里,`&lt;context:property-placeholder&gt;`元素是用来加载所有的`.properties`文件,而`&lt;context:component-scan&gt;`则用于扫描指定包下的所有非@Controller注解的类,以便进行依赖注入。 2. `db-mybatis.xml`:这是...

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

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

    引入多个properties时.txt

    在`applicationContext.xml`中通过`&lt;context:property-placeholder&gt;`标签来指定`properties`文件的位置。例如,我们需要引入两个文件:`jdbc.properties`和`res.properties`,可以这样配置: ```xml &lt;!-- 引入 jdbc...

    一个整合ssm框架的实例

    &lt;context:property-placeholder location="classpath:jdbc.properties"/&gt; &lt;!-- 配置数据库连接池 --&gt; &lt;!-- 基本属性 url、user、password --&gt; &lt;property name="url" value="${jdbc.url}" /&gt; &lt;property name=...

    17 Spring IoC容器如何读取多个属性文件或者配置文件?慕课专栏(1)1

    在Spring的老版本中,通常使用`&lt;context:property-placeholder&gt;`或`&lt;util:properties&gt;`元素来加载属性文件。例如: ```xml &lt;!-- 使用 context:property-placeholder --&gt; xmlns:xsi=...

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

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

Global site tag (gtag.js) - Google Analytics