spring-boot - 将外部第三方属性文件与 Spring Boot Fat Jar 一起使用

标签 spring-boot tomcat atlassian-crowd

我有一个 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 的帮助下解决这个问题,特别是“原始答案”下的部分。

事实证明,需要一个由两部分组成的解决方案。

  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 中查找,您可以在其中提供额外的文件夹。

关于spring-boot - 将外部第三方属性文件与 Spring Boot Fat Jar 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51735728/

相关文章:

spring - 使用 Spring 数据 MongoDB @Document 创建一个上限集合

java - JdbcTemplate 抛出异常

Apache 将除 webmail 之外的所有内容都转发给 Tomcat

java - 绑定(bind)到 Tomcat 中的套接字

single-sign-on - Atlassian Crowd 体验?

java - 为什么 ResponseEntity 主体返回 null?

java - 预检响应中的 Access-Control-Allow-Headers 不允许在请求 header 字段 Access-Control-Allow-Origin 中启用 cors

tomcat 6 需要很长时间才能关机

javascript - 具有对外部 api 的基本身份验证的获取请求的 Firebase 云功能

Node.js - 使用带有内部 CA 的 https.request()