将外部第三方属性文件与 Spring Boot Fat Jar 一起使用
Using external third-party properties file with Spring Boot Fat Jar
我有一个 Spring 启动应用程序,它将作为一个 fat jar 进行部署。它与 Atlassian 的 Crowd 集成以进行身份验证。这需要在类路径上提供一个 crowd.properties
文件。我宁愿不将属性文件(包括密码)与 jar 捆绑在一起。
有没有办法告诉 Spring 启动包含另一个文件或目录以在何处搜索 属性 文件?
以前用standalone/externalTomcat做这个的时候,我会用catalina.properties
中的shared.loader
属性来指定一个目录属性 个文件可用。
我尝试将文件包含在 jar 的根位置以及 /config
位置,但无济于事。 Atlassian 也有一个页面指示使用 -Dcrowd.properties=...
命令行参数来设置它,但也无济于事。
注意:这不是在外部位置引用application.properties
。
好的,所以我在 的帮助下解决了这个问题,特别是 "Original 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 启动应用程序,它将作为一个 fat jar 进行部署。它与 Atlassian 的 Crowd 集成以进行身份验证。这需要在类路径上提供一个 crowd.properties
文件。我宁愿不将属性文件(包括密码)与 jar 捆绑在一起。
有没有办法告诉 Spring 启动包含另一个文件或目录以在何处搜索 属性 文件?
以前用standalone/externalTomcat做这个的时候,我会用catalina.properties
中的shared.loader
属性来指定一个目录属性 个文件可用。
我尝试将文件包含在 jar 的根位置以及 /config
位置,但无济于事。 Atlassian 也有一个页面指示使用 -Dcrowd.properties=...
命令行参数来设置它,但也无济于事。
注意:这不是在外部位置引用application.properties
。
好的,所以我在
事实证明需要两部分解决方案。
- 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
中查找,您可以在其中提供其他文件夹。