我使用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。你知道解决这个棘手问题的方法吗?
谢谢,
答案 0 :(得分:2)
尝试classpath*:jdbc.properties
答案 1 :(得分:1)
IANA OSGI开发人员,但快速的Google搜索结果是link的Spring-osgi文档。请参阅第5.4节,并注意spring-osgi包对Resource
加载进行了一些更改。如果没有提供其他前缀,osgi的默认ResourceLoader
实现的ApplicationContext
似乎会自动预先osgibundle:
。
使用classpath:
时搜索到的路径与使用classpath*:
时使用的路径之间的范围似乎有所不同,但到目前为止我无法找到一个好的解释