我的问题与此问题完全相同: Spring application context external properties?
这是我之前注入道具文件的方式:
<util:properties id="smrProps" location="classpath:/spring/SomeProps.properties" />
但是对于我的生活,当我想要注入一个与runnable jar在同一目录中的属性文件时,我无法弄清楚在location
中要使用什么。我知道classpath指向的位置和我的道具只有一个级别,所以我甚至尝试classpath:/../SomeProps.properties
假设它会在父文件夹中查找,但没有运气。
对于ex,如果jar位于:C:\temp\some.jar
且属性文件位于C:\temp\SomeProps.properties
如果some.jar在temp中,那么SomeProps.properties也将处于temp状态。当然,我不能在位置
中使用C:\ temp \ SomeProps.properties有人可以指导我如何使用这个道具文件吗?
答案 0 :(得分:0)
我认为不可能使用相对路径来访问.jar
以外util:properties
以外的内容。
但是,如果可以的话,您应该可以使用系统属性来完成它。
此外,您应该使用file:
代替classpath:
。像这样:
<util:properties id="smrProps" location="file:{my.path}/SomeProps.properties" />
然后用这样的东西执行.jar:
java -Dmy.path=/YourFolderPath -jar application.jar
另一种解决方案是扩展PropertyPlaceholderConfigurer
,然后使用.jar
获取Java
的路径。看看这个问题:Loading Properties with Spring (via System Properties)
答案 1 :(得分:0)
另一个解决方案是弄清楚运行jar的路径
return new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
使用它在父文件夹中找到您的prop文件,并使用SPEL将其注入上下文
以下是它的外观(您可能想稍微整理一下,但我能够模仿您的情况并验证此解决方案):
<util:properties id="smrProps" location="'file:' + new java.io.File(T(com.yourpackage.YourClass).getProtectionDomain().getCodeSource().getLocation().getPath()).getParent() + '/'+ settings.prop'" />