Spring:PropertyPlaceholderConfigurer找不到属性文件

时间:2011-08-25 13:25:55

标签: java spring properties classpath osgi

我使用PropertyPlaceholderConfigurer的Spring遇到了一个奇怪的问题。我的一个豆子设计如下:

<bean name="propertyPlaceholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <value>classpath:jdbc.properties</value>
    </property>
</bean>

问题是spring永远不会找到jdbc.properties(FileNotFoundException)。该文件位于bundle classpath中的名为“resources”的文件夹中(我在OSGi项目中工作)。

我几乎尝试了所有组合(“jdbc.properties”,“/ jdbc.properties”,“classpath:jdbc.properties”,“classpath:/jdbc.properties”,“/ resourcess / jdbc.properties”等) ......)但它永远不会奏效。

有关信息,如果在某些时候,我会执行以下操作:

URL u = someClassLoader.getResource("jdbc.properties");

它确实可以正常工作并找到该文件。实际上我完全无法理解春天的错误是什么。

如果您有任何想法可以帮助我,请提前感谢。我在春天不是很有经验,所以我可能在某处犯了错误。

[编辑]

实际上,这是类加载器的问题: 如果我这样做:

new ClassPathResource("jdbc.properties");

它不起作用。但是:

new ClassPathResource("jdbc.properties",someClassIntheBundle.class.getClassLoader());

完美无缺。

我确实认为Spring使用了我自己的bundle所使用的ClassLoader。你知道解决这个棘手问题的方法吗?

谢谢,

2 个答案:

答案 0 :(得分:2)

尝试classpath*:jdbc.properties

答案 1 :(得分:1)

IANA OSGI开发人员,但快速的Google搜索结果是link的Spring-osgi文档。请参阅第5.4节,并注意spring-osgi包对Resource加载进行了一些更改。如果没有提供其他前缀,osgi的默认ResourceLoader实现的ApplicationContext似乎会自动预先osgibundle:

使用classpath:时搜索到的路径与使用classpath*:时使用的路径之间的范围似乎有所不同,但到目前为止我无法找到一个好的解释