java - 使用 -Dloader.path= 运行 jar 有效,但不是 application.properties loader.path
问题描述
我在 /config/application.properties 下有一个外部属性文件,我从中检索属性。当我运行我的 jar 时,它能够从中获取某些属性(例如 server.port=8083)
这是我的文件/文件夹的结构:
ProjectFolder
|
+-- mytool.jar
|
+-- config
| |
| +-- application.properties
|
+-- lib
| |
| +-- externalJar.jar
现在,问题是我需要来自外部属性文件的属性“loader.path”,当我运行 jar 时,所有其他属性都被正确加载,除了 loader.path:
java -jar mytool.jar
在外部 application.properties 内部包含:
spring.servlet.multipart.enabled=false
server.port = 8083
logging.file = /someplace/
loader.path=lib
由于它没有加载 externalJar.jar,我遇到了 classNotFoundExceptions。
然而,奇怪的是,当我启动应用程序时:
java -Dloader.path=lib -jar mytool.jar
一切都按预期工作。
我是否缺少 application.properties 文件的某些内容?我尝试使用完整路径:
loader.path=/home/me/ProjectFolder/lib
但这也没有用。我确信正在读取 application.properties,因为启动时显示的 server.port 号是我特别指定的。
我已将项目更改为在 Maven 中使用 PropertiesLauncher。清单文件
Manifest-Version: 1.0
Implementation-Title: mytool
Implementation-Version: 0.0.1-SNAPSHOT
Built-By: giraffepoo
Implementation-Vendor-Id: com.sap
Spring-Boot-Version: 2.1.3.RELEASE
Main-Class: org.springframework.boot.loader.PropertiesLauncher
Start-Class: com.sap.mytool
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_201
Implementation-URL: https://projects.spring.io/spring-boot/#/spring-bo
ot-starter-parent/mytool
如果有人能指出我正确的方向,非常感谢您的帮助。谢谢!
注意:不确定是否相关,但 externalJar.jar 在应用程序启动时立即使用覆盖方法:contextInitialized
解决方案
我知道有一个老问题,但仍然没有答案。我认为问题在于loader.path
应该在独立loader.properties
文件中提供该属性。如文档中所述。
另请记住,它仅适用于PropertiesLauncher
,不适用于JarLauncher
or WarLauncher
。
推荐阅读
- php - 错误“无法在广告素材中使用视频。视频 ID XXX,XXX,XXX,XXX,XXX 可能不是视频 ID,或者您可能无权查看它”
- ios - 紧凑 <--> 通过旋转定期更改大小 = 以编程方式使用自动布局时无法同时满足约束
- iframe - Geb withFrame - “调用函数结果缺少‘值’”
- ruby - 我可以将 PRY 与 alpine-linux 一起使用吗?
- java - 如何在 java 中发送 SOAP API 调用并以 json 格式返回
- python-3.x - 在 Python Lib 中将 SQLite 3.21 更新到 3.24+
- docker - Docker 无法通过主机名 ping 本地网络机器
- java - JDK9 自动模块和“拆分包”依赖项
- python - 使文件自行清理的程序
- math - 透视投影矩阵的通用公式