为什么Spring会尝试使用属性变量引用字符串而不是值?

时间:2010-08-13 17:08:00

标签: java spring properties

简而言之,这就是问题所在:

<bean id="handlerFactory" class="com.westfieldgrp.audit.jdklogging.cpm.CPMHandlerFactory">
    <property name="schemaName" value="${env.audit.databaseSchema}" />
    <property name="bufferSize" value="${env.audit.bufferSize}" /> 
    <property name="threaded" value="${env.audit.threadedAuditHandler}" />
    <property name="dataSourceSelector" ref="dataSourceSelector" />
</bean>
CPMHandlerFactory上的

bufferSize是一个int。 Spring失败了,因为它试图将值设置为'$ {env.audit.bufferSize}'而不是属性文件中的实际值。

现在,当我在文件中更改属性文件或env.audit.bufferSize的名称时,Spring会抱怨它找不到属性'env.audit.bufferSize'。这告诉我它可以找到属性,但不是将值设置为'20',而是尝试将其设置为'$ {env.audit.bufferSize}'。任何人都可以解释为什么Spring会这样做以及我能做些什么呢?

以下属性文件的内容:

env.audit.databaseSchema=TDB2DATA
env.audit.dataSourceName=java:comp/env/AuditDataSourceAlias
env.audit.bufferSize=20
env.audit.threadedAuditHandler=true

谢谢, 彼得

修改

感谢下面的Jamestastic发现了这个问题。这是它的原因: 我们有一个“主”上下文文件,如下所示:

<import resource="environmentBeans.xml" />
<import resource="serviceBeans.xml" />
<import resource="auditBeans.xml" />

'environmentBeans.xml'中包含PropertyPlaceholderConfigurer。问题是,我添加了一些引用'auditBeans.xml'上下文的代码,当然有配置器。我将其切换为引用“主”上下文并且效果很好。

关键是理解为什么价值不会被取代:因为没有属性配置器。

所以,谢谢!

1 个答案:

答案 0 :(得分:1)

您是否记得在Spring上下文中添加<context:property-placeholder />PropertyPlaceholderConfigurer bean定义?