【发布时间】:2011-11-03 16:55:34
【问题描述】:
我在使用 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)。该文件位于捆绑类路径中名为“resources”的文件夹中(我在一个 OSGi 项目中工作)。
我几乎尝试了所有组合(“jdbc.properties”、“/jdbc.properties”、“classpath:jdbc.properties”、“classpath:/jdbc.properties”、“/resources/jdbc.properties”等...) 但它永远不会起作用。
关于信息,如果在某个时候,我会做类似的事情:
URL u = someClassLoader.getResource("jdbc.properties");
它确实可以正常工作并找到文件。实际上我完全无法理解 spring 的错误是什么。
如果您有任何想法可以帮助我,请提前致谢。我在春天不是很有经验,所以我可能在某个地方做错了。
[编辑]
其实是classloader的问题: 如果我这样做:
new ClassPathResource("jdbc.properties");
它不起作用。但是:
new ClassPathResource("jdbc.properties",someClassIntheBundle.class.getClassLoader());
完美运行。
我确实相信 Spring 使用我的 bundle 使用的自己的 bundle 的 ClassLoader。你知道解决这个棘手问题的方法吗?
谢谢,
【问题讨论】:
-
目前,我必须在我的配置文件中放置糟糕的静态路径以进行测试(例如 bundleresource://63.jhdjlzeo:2/jdbc.properties(它适用于它))。我还没有找到任何其他解决方案(参见其他 cmets infra)
标签: java spring properties classpath osgi