我有一个 Spring Boot 应用程序,它将作为一个 fat jar 进行部署。它与 Atlassian 的 Crowd 集成以进行身份验证。这需要在类路径上提供一个 crowd.properties
文件。我宁愿不将属性文件(包括密码)与 jar 捆绑在一起。
有没有办法告诉 Spring Boot 包含另一个文件或目录来搜索属性文件?
在过去使用独立/外部 Tomcat 时,我会使用 catalina.properties
中的 shared.loader
属性来指定一个目录,其中包含其他属性文件将可用。
我已经尝试将文件包含在 jar 的根位置以及 /config
位置,但无济于事。 Atlassian 也有一个页面指示使用 -Dcrowd.properties=...
命令行参数来设置它,但也无济于事。
注意:这不是在外部位置引用application.properties
。
最佳答案
好的,所以我能够在 this answer 的帮助下解决这个问题,特别是“原始答案”下的部分。
事实证明,需要一个由两部分组成的解决方案。
- spring-boot-maven-plugin 需要设置一些配置。通过将
layout
设置为ZIP
,它将使用PropertiesLauncher
而不是JarLauncher
,(我相信)允许您使用加载器属性。
`
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>ZIP</layout>
</configuration>
</plugin>
- 使用
-Dloader.path=/folder/with/property/file/
命令行参数提供属性文件的位置。注意:这必须在-jar
参数之后。
有关原因的更多信息,请继续阅读。
根据“Launching Executable Jars”的 Spring 文档,可以使用三个启动器来加载应用程序的文件。默认情况下使用 JarLauncher
,它限制了您可以检索资源的位置。另一方面,PropertiesLauncher
将在 BOOT-INF/lib/
和 loader.path
中查找,您可以在其中提供额外的文件夹。
关于spring-boot - 将外部第三方属性文件与 Spring Boot Fat Jar 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51735728/