2016-01-06 60 views
1

我使用Java控制台应用程序。有一个在我的application.properties文件,其中包含另一个文件名作为属性的值的属性,如使用Spring相对于jar的文件

my.file.location=file:myDir/myFileName 

在代码中,我试图让这样的文件:

@Value("${my.file.location}") 
private File myfileLocation; 

如果我从包含jar文件的目录启动应用程序,则该文件已解析,但是当我从其他位置运行我的应用程序时,文件位置无效。

我不能在classpath上有这个文件,它必须在jar文件的外部。

如何使文件路径相对于我的jar文件而不是当前的工作目录?

回答

1

我相信这和春天没有关系吧?你只是想加载配置文件,这是在你的应用程序,解压缩,所以用户可以修改它,好吗?

首先,您可以尝试总是设置的工作目录,我相信这是更“标准”解决方案。在窗口中,您可以做一个链接,指定开始在部分,包含了你的jar文件的路径(或batcmd,等等)。

如果您坚持使用罐子路径,您可以使用How to get the path of a running JAR file解决方案。请注意,该jar必须从文件系统加载:

URI path = MySpringBean.class.getProtectionDomain().getCodeSource().getLocation().toURI(); 
File myfileLocation = new File(new File(path).getParent(), "/myDir/jdbc.properties"); 
+0

谢谢您提供的答案。我在想,如何使用相对于jar文件的@Value(“$ {my.file.location}”),所以这个问题真的与Spring相关。 – Michal

+0

那么,你可以调用'myfileLocation.getPath()'获得相对路径,但是你仍然需要用完整路径创建新的'File'。如果你需要的话,你可以使用spring [SpEL](http://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html)来完成。 – vnov

相关问题