如何解决如何获取jar外部文件的Url?
我已经使用maven-assembly-plugin以分解模式部署了spring boot应用程序。我已经从项目的资源文件夹中创建了config文件夹。
文件结构
目标文件夹:
+springdemo-0.0.1-application.zip
+config
+myfolder
-oldfile.png
+springdemo-0.0.1.jar //running this jar file
+start.sh
-springdemo-0.0.1.jar
我希望将文件的URL存储在myfolder中。第三方(例如毕加索)将访问此URL,以获取文件数据。我无法获得指向此myfolder文件的正确网址。
解决方法
注意:这不是特定于SpringBoot的答案,只是简单的Java方式。
您只能尝试猜测文件的位置,因为在运行Java应用程序时无法知道工作目录。
例如,如果您控制Java应用程序的执行方式,则可以尝试一种非常简单的方法:
var configFile = new File("config/application.properties");
只要该过程从start.sh
所在的同一目录(看起来像您想要的)开始,此方法就起作用。
如果它不起作用,请尝试首先像这样打印工作目录:
System.out.println("WRK DIR = " + new File(".").getAbsolutePath());
这将告诉您文件的相对路径应该是什么。
因此,如果打印出<root-dir>/springdemo
并且您知道您的配置文件位于<root-dir>/springdemo/mydir/config/
下,则文件路径应为:
new File("mydir/config/application.properties");
顺便说一句,您可以轻松地通过以下方式读取文件:
// read file into List of lines
Files.readAllLines(configFile);
// specifically,for properties file
var props = new Properties();
props.load(new FileInputStream(configFile));
如果出于某种原因需要URL对象而不是File,这很简单,只需致电:
URL url = configFile.toURI().toURL()
如果要将所有文件都放在config目录下,则可以使用以下命令首先列出它们:
File[] files = configFile.getParentFile().listFiles();
if (files != null) {
for (File file : files) {
// use file?
}
}
,
很容易,您需要提供外部application.properties文件的完整路径,而不是在运行时spring-boot.jar应用程序启动期间源代码中提供的完整路径。
示例:java -jar -Dspring.config.location = file://
此外部文件的优先级高于我们jar文件中的外部文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。