更新
我使用此处描述的方法从“类路径:”和“类路径 *:”打印出生成的 java 类路径并得到以下结果,但我仍然从 PPC 中为我的 jms.properties 文件中定义的属性获得 BeanDefinitionStoreException。是什么赋予了!?
[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 中声明以下位置:
<value>classpath*:conf/${implementation.env}/*.properties</value>
我不打算用 Spring 加载 jGroups 属性文件。我在我的应用程序执行中采用老式的方式。
问题
conf/[env] 的目录路径重复这一简单事实导致某处发生冲突,并且没有加载来自 DependencyProject 的属性。我尝试添加“classpath *:”而不仅仅是“classpath:”,但它没有效果。我也尝试过使用 IgnoreUnresolvablePlaceholders,但我不确定这是正确的解决方案。
我知道这与文件夹结构有关,因为我可以插入一个文件夹,这样两条路径就不会相互镜像,并且一切正常。
DependencyProject/src/main/resources/conf/[env]
StandaloneProject/src/main/resources/conf/folder/[env]
有任何想法吗?