【问题标题】:Spring : PropertyPlaceholderConfigurer cannot find property fileSpring:PropertyPlaceholderConfigurer 找不到属性文件
【发布时间】: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


【解决方案1】:

试试classpath*:jdbc.properties

【讨论】:

  • 实际上,它不再抱怨,但也找不到位置:s 在所有情况下都感谢您的帮助。你知道类路径的主要区别是什么吗?
  • 抱歉回答太长了。你可以在春天找到它references。当然,您可以创建 PropertyPlaceholderConfigurer 的子类并使用 MyConfigurer.class.getResourceAsStream() 加载道具文件。
【解决方案2】:

IANA OSGI 开发人员,但通过 Google 快速搜索会在 Spring-osgi 文档中找到 link。查看第 5.4 节,注意 spring-osgi 包对 Resource 加载进行了一些更改。如果没有提供其他前缀,则 osgi 的默认 ApplicationContext 实现的 ResourceLoader 看起来会自动预置 osgibundle:

使用classpath: 时搜索的路径与使用classpath*: 时搜索的路径之间似乎存在一些范围差异,但我至今无法找到一个好的解释。

【讨论】:

  • 感谢您的链接。我可能错过了它。在所有情况下,我都需要调查一些“奇怪”的事情(使用 classpath*:,它确实找到了属性文件,但它仍然无法解析占位符。它可能根本没有链接,但我不确定.. .
  • @ThR37:我目前无法找到它的文档,但我似乎记得当在父 PropertyPlaceholderConfigurer 中加载属性时,属性令牌解析存在缺陷 @987654329 @ 引用自 imported ApplicationContext
猜你喜欢
  • 2019-05-10
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
  • 2023-02-01
  • 2014-07-29
  • 2013-11-15
  • 2012-08-27
  • 2018-01-04
相关资源
最近更新 更多