有时候需要从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
分享到:
相关推荐
在Spring框架中,Property Placeholder是用于管理应用配置属性的一个强大工具。这个例子“基于Spring 2.0 Property Placeholder配置的源码”展示了如何在应用程序中使用Property Placeholder来动态加载和替换配置...
本笔记将专注于Spring框架中的一个关键特性——通过`property-placeholder`使用外部属性文件,这在实际项目中非常常见,能够有效地实现配置的解耦和管理。 首先,让我们理解`property-placeholder`的概念。在Spring...
context:property-placeholder 和util:properties 博客:https://blog.csdn.net/u010476739/article/details/76735527
Spring 中 property-placeholder 的使用与解析详解 -property-placeholder 是 Spring 框架中的一种机制,用于加载和解析 properties 文件中的配置信息。在本文中,我们将详细介绍 property-placeholder 的使用和...
5. 使用Spring的`PropertySourcesPlaceholderConfigurer`代替`<context:property-placeholder>`,它提供了更多的灵活性和控制,比如可以配置多个`PropertySource`,分别对应不同的属性文件。 6. 确认Spring配置文件...
在Spring框架中,**属性占位符配置器**(Property Placeholder Configurator)是一种强大的配置工具,它允许开发者在配置文件中使用占位符来引用外部属性文件中的值,从而实现了配置的动态化和灵活性。这一特性在处理...
- **Property Placeholder Configuration**:支持外部配置文件的占位符替换。 - **Custom Property Editors**:注册自定义的PropertyEditor,用于类型转换。 #### 五、Spring框架的高级特性 - **...
@property (nonatomic, strong) NSString *placeholder; @property (nonatomic, strong) UIColor *placeholderColor; @end // UITextView+PlaceHolder.m #import "UITextView+PlaceHolder.h" @implementation ...
@import UIKit; FOUNDATION_EXPORT double UITextView_...@property (nonatomic, copy) NSString *placeholder; /* 占位文字颜色 */ @property (nonatomic, strong) UIColor *placeholderColor; @end
应该使用Spring的Property Placeholder Configurer解析以下属性 org.onelogin.saml.idp.metadata.file = IDP元数据XML文件的路径 org.onelogin.saml.idp.url = IDP启动的SSO URL org.onelogin.idp
- `supportProperty(nodeType, property)`: 这个方法用于检测浏览器是否支持某个特定的属性。 - `getPositionInDoc(target, parent)`: 此方法用于获取对象在文档中的位置。 - `$c`: 是一个快速创建DOM对象的方法。 ...
在这个自定义TextView中,我们可能会看到如`@property (nonatomic, strong) NSString *placeholder;`这样的声明,用于存储占位符文本,以及可能的方法如`- (void)setPlaceholder:(NSString *)placeholder;`用于设置...
在这里,`<context:property-placeholder>`元素是用来加载所有的`.properties`文件,而`<context:component-scan>`则用于扫描指定包下的所有非@Controller注解的类,以便进行依赖注入。 2. `db-mybatis.xml`:这是...
例如,Spring的`PropertyPlaceholderConfigurer`和`<context:property-placeholder>`适用于Spring应用,而`ResourceBundle`适合处理本地化,`Properties`类则是一个通用解决方案。理解并熟练掌握这些方法,将有助于...
在`applicationContext.xml`中通过`<context:property-placeholder>`标签来指定`properties`文件的位置。例如,我们需要引入两个文件:`jdbc.properties`和`res.properties`,可以这样配置: ```xml <!-- 引入 jdbc...
<context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置数据库连接池 --> <!-- 基本属性 url、user、password --> <property name="url" value="${jdbc.url}" /> <property name=...
在Spring的老版本中,通常使用`<context:property-placeholder>`或`<util:properties>`元素来加载属性文件。例如: ```xml <!-- 使用 context:property-placeholder --> xmlns:xsi=...
除了`<property-placeholder>`标签,BBoss还支持使用`<context:property-placeholder>`标签,它是Spring框架的一部分,也可以与BBoss集成使用。这种方式的配置类似,但提供了更多的选项,如默认值、忽略未定义的属性...