【问题标题】:Spring PropertyPlaceholderConfigurer fails to resolve property file under duplicate directory name - receive BeanDefinitionStoreExceptionSpring PropertyPlaceholderConfigurer 无法解析重复目录名称下的属性文件 - 接收 BeanDefinitionStoreException
【发布时间】:2012-10-10 22:29:36
【问题描述】:

更新

我使用here 描述的方法从“classpath:”和“classpath*:”打印出生成的 java 类路径并得到以下结果,但我仍然从 PPC 中获得一个 BeanDefinitionStoreException,用于我定义的属性jms.properties 文件。什么给了!?

[main] INFO - .......Loading........
[main] INFO - printing normal classpath
[main] INFO - class path resource [conf/dev/jgroups.properties]
[main] INFO - printing wildcard classpath
[main] INFO - URL [jar:file:/filepath/StandaloneProject.jar!/conf/dev/jgroups.properties]
[main] INFO - URL [jar:file:/filepath/DependencyProject.jar!/conf/dev/jdbc.properties]
[main] INFO - URL [jar:file:/filepath/DependencyProject.jar!/conf/dev/jms.properties]

它在我的 Windows 机器上运行良好。它在我的开发 Linux 机器上失败了???如果您没有实际答案但可以指导我如何调试正在发生的事情,我们将不胜感激任何帮助,这也很有帮助。

更新 #2

我也试过添加

<property name="ignoreUnresolvablePlaceholders" value="true" />

到我的 EncryptablePropertyPlaceholderConfigurer 的属性列表,但我仍然收到 BeanDefinitionStoreException :(

背景

我正在使用一个独立的 java maven 项目,其中包括另一个项目作为依赖项。包含的项目是一组核心类,并具有每个环境的属性文件。

这些文件在打包到依赖项 jar 之前存储在 main/resources/conf/[env] 中(我们将其称为 DependencyProject)。该项目包含一个 Spring 2.5.6 PropertyPlaceholderConfigurer,用于自动将属性加载到 bean 中。

现在,我要做的是使用 jGroups 将我的应用程序集群到多个服务器上。这需要在 DependencyProject 的属性之外添加特定于 env 的属性文件到 StandaloneProject,因此 jGroups 知道它需要在每个环境中与哪个地址和端口进行通信。这些属性不属于依赖项。我想我会将它们放在具有相同文件夹名称的 StandaloneProject 下的配置路径中,以便美观且一致。每个人都喜欢一致性,对吧?

所以,到目前为止,我得到的是如下所示的文件夹:

DependencyProject/src/main/resources/conf/[env]
(这些文件夹包含 jms.properties、jdbc.properties 等文件)

StandaloneProject/src/main/resources/conf/[env]
(这些文件夹包含一个 jgroups.properties 文件)

DependencyProject 在 PropertyPlaceholderConfigurer 中声明以下位置:

&lt;value&gt;classpath*:conf/${implementation.env}/*.properties&lt;/value&gt;

我不打算用 Spring 加载 jGroups 属性文件。我在我的应用程序执行中采用了老式的方式。

问题

conf/[env] 的目录路径重复这一简单事实导致某处发生冲突,并且没有加载来自 DependencyProject 的属性。我尝试添加“classpath *:”而不仅仅是“classpath:”,但它没有效果。我也尝试过使用 IgnoreUnresolvablePlaceholders,但我不确定这是正确的解决方案。

我知道这与文件夹结构有关,因为我可以插入一个文件夹,这样两条路径就不会相互镜像,一切正常。

DependencyProject/src/main/resources/conf/[env] StandaloneProject/src/main/resources/conf/folder/[env]

有什么想法吗?

【问题讨论】:

    标签: java spring properties


    【解决方案1】:

    我最后只是在我的 conf 文件夹下放了一个 jgroups 文件夹。我希望将所有内容都放在 /conf 目录中,而不是 /conf 中的一些属性和 /conf/jgroups 中的一些属性,但是这样可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 2010-12-08
      • 2013-10-21
      • 2013-08-21
      • 2013-05-16
      • 1970-01-01
      • 2021-11-24
      相关资源
      最近更新 更多