如何在spring上下文中注入外部属性文件

时间:2013-07-03 20:59:28

标签: java spring properties jar

我的问题与此问题完全相同: 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

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

2 个答案:

答案 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'" />