我正在尝试使用PropertyPlaceholderConfigurer来读取我的应用配置。基本上,WEB-INF/config/config.properties
中有第一个配置文件,其中包含另一个属性文件的文件系统位置(以便在应用程序部署或更新期间不会销毁它)。我试图在servlet-context.xml
中设置此设置,但只有第一个设置有效:
<bean id="propertyConfigurerInternal"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>/WEB-INF/config/config.properties</value>
</property>
</bean>
<bean id="propertyConfigurerExternal"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
depends-on="propertyConfigurerInternal">
<property name="location">
<value>file:${baseDataFolder}/jaccise.conf</value>
</property>
</bean>
第一个(propertyConfigurerInternal
)创建没有问题,但第二个失败如下:
像EL表达式不起作用......如何解决这个问题?
org.springframework.beans.factory.BeanInitializationException
:无法加载属性;嵌套异常为java.io.FileNotFoundException
:${baseDataFolder}\jaccise.conf
(Impossibile trovare il percorso specificato)&lt; - 表示“无法在指定路径中找到文件”
答案 0 :(得分:0)
你可以这样做:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>/WEB-INF/config/config.properties</value>
<value>file:${baseDataFolder}/jaccise.conf</value>
</list>
</property>
</bean>
只需使用一个PlaceholderConfigurer,看看是否是导致问题的原因。我从来没有见过像你正在尝试的那样创建两个实例,我猜这可能会有问题。
希望这有帮助。
答案 1 :(得分:0)
depends-on="propertyConfigurerInternal"
表示在propertyConfigurerInternal
之前初始化propertyConfigurerExternal
。
并且${baseDataFolder}
必须包含在propertyConfigurerInternal
的属性文件中(在您的情况下为config.properties
),否则无法对其进行解析。
因此,您应该查看/WEB-INF/config/config.properties
,看看是否在文件中设置了${baseDataFolder}
。