1

我的问题与这个问题完全相同: Spring application context external properties?

这就是我之前注入道具文件的方式:

<util:properties id="smrProps" location="classpath:/spring/SomeProps.properties" />  

location但是对于我的生活,当我想注入一个与可运行 jar 位于同一目录中的属性文件时,我无法弄清楚该使用什么。我知道类路径指向的位置,并且我的道具只是上一级,所以我什至尝试classpath:/../SomeProps.properties假设它会在父文件夹中查找,但没有运气。

例如,如果 jar 在:C:\temp\some.jar并且属性文件在C:\temp\SomeProps.properties

如果 some.jar 在 temp 中,那么 SomeProps.properties 也将在 temp 中。当然,我不能在位置使用 C:\temp\SomeProps.properties

有人可以指导我如何使用这个道具文件吗?

4

2 回答 2

0

我认为不可能使用相对路径来访问.jarwith之外的东西util:properties

但是,如果可以的话,您应该能够通过使用系统属性来做到这一点。

此外,您应该使用file:而不是classpath:. 像这样的东西:

<util:properties id="smrProps" location="file:{my.path}/SomeProps.properties" />

然后用这样的东西执行.jar:

java -Dmy.path=/YourFolderPath -jar application.jar

另一种解决方案是扩展 thePropertyPlaceholderConfigurer然后获取.jarwith的路径Java。看看这个问题:Loading Properties with Spring (via System Properties)

于 2013-07-03T21:43:02.757 回答
0

另一种解决方案是找出运行jar的路径

return new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());

使用它在父文件夹中找到您的道具文件并使用 SPEL 将其注入上下文

这是它的外观(您可能想稍微整理一下,但我能够模拟您的情况并验证了此解决方案):

<util:properties id="smrProps" location="'file:' + new java.io.File(T(com.yourpackage.YourClass).getProtectionDomain().getCodeSource().getLocation().getPath()).getParent() + '/'+ settings.prop'" />
于 2013-07-04T00:49:22.963 回答