将外部第三方属性文件与 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".

下的部分

事实证明需要两部分解决方案。

  1. 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>
  1. 使用 -Dloader.path=/folder/with/property/file/ 命令行参数提供属性文件的位置。注意:这必须在 -jar 参数之后。

有关原因的更多信息,请继续阅读。

根据“Launching Executable Jars”的 Spring 文档,可以使用三个启动器来加载应用程序的文件。默认情况下使用 JarLauncher,这限制了您可以检索资源的位置。另一方面,PropertiesLauncher 会在 BOOT-INF/lib/ 中查找,但也会在 loader.path 中查找,您可以在其中提供其他文件夹。