Java FAT JAR外部的Spring引导属性

Java FAT JAR外部的Spring引导属性,java,spring,spring-boot,config,executable-jar,Java,Spring,Spring Boot,Config,Executable Jar,我正在做一个项目,有一个用例,我需要从JAR外部为Spring启动提供application.properties文件 根据,提取application.properties的优先级顺序为 当前目录的/config子目录 当前目录 类路径/配置包 类路径根 前两个的问题是我需要导航到包含配置的目录来运行JAR。在本地工作时,这听起来没有问题,但在通过CI/CD框架在远程主机上部署时,这不是一个可行的解决方案 我试图找到一种使用类路径的机制,避免使用上面提到的SpringBoot命令行选项或设置环

我正在做一个项目,有一个用例,我需要从JAR外部为Spring启动提供application.properties文件

根据,提取application.properties的优先级顺序为

  • 当前目录的/config子目录
  • 当前目录
  • 类路径/配置包
  • 类路径根
  • 前两个的问题是我需要导航到包含配置的目录来运行JAR。在本地工作时,这听起来没有问题,但在通过CI/CD框架在远程主机上部署时,这不是一个可行的解决方案

    我试图找到一种使用类路径的机制,避免使用上面提到的SpringBoot命令行选项或设置环境变量

    我无法理解如何在运行FAT JAR时设置类路径并同时指定配置。如果可以,请帮我弄清楚

    提前感谢:)

    编辑:我知道使用Spring Boot的命令行选项(如Spring.config或loader.path等)可以实现这一点

    我试图找到一个基于类路径和目录结构的更隐式的解决方案,只是为了减少与正在使用Spring Boot这一事实的耦合。

    根据,您可以使用
    Spring.config.location
    属性定义外部配置位置。更具体地说:

    如果
    spring.config.location
    包含目录(与文件相反), 它们应该以/(结尾,并在运行时附加名称 加载前从
    spring.config.name
    生成,包括 配置文件特定的文件名)。 中指定的文件
    spring.config.location
    按原样使用,不支持 特定于配置文件的变量,并由任何特定于配置文件的变量覆盖 财产

    配置位置按相反顺序搜索。默认情况下 配置的位置包括:

    classpath:/,classpath:/config/,file:./,file:./config/

    结果 搜索顺序如下:

    file:./config/file:./classpath:/config/classpath://

    当习惯 配置位置是使用
    spring.config.location
    配置的,它们 替换默认位置。例如,如果
    spring.config.location
    已使用值配置

    classpath:/custom config/,文件:./custom config/
    搜查令 变为以下内容:

    文件:./custom-config/classpath:custom-config/

    或者,当 自定义配置位置是通过使用
    spring.config.additional location
    ,除了 默认位置。 在搜索之前搜索其他位置 默认位置。例如,如果
    classpath:/custom config/,文件:./custom config/
    如果已配置,则 搜索顺序如下所示:

    file:./custom-config/classpath:custom-config/file:./config/file:./classpath:/config/classpath://

    包含外部configi的目录的示例用法如下:

    java -jar myproject.jar --spring.config.location=file:/custom-config-dir/
    
    或直接指向外部配置文件:

    java -jar myproject.jar --spring.config.location=file:/custom-config-dir/custom-config.properties
    

    将自定义配置位置指定为VM参数是另一个选项

    java -Dspring.config.location=<config-dir-path> -jar demo.jar
    
    java-Dspring.config.location=-jar demo.jar
    
    您是否尝试过使用
    java-jar app.jar--spring.config.location=other location.properties
    嘿,我希望直接使用类路径,而不必使用spring启动时提供的选项,例如spring.config、loader.config等,只需使用jar、属性文件和类路径来指定jar和配置所需的位置。(最后2个优先级选项)此线程上的更多选项。感谢您的回答,但我们正在尝试在不使用spring提供的运行时选项的情况下实现它。我在问题中添加了一个编辑。你知道一种与之相一致的方法吗?你所说的spring提供的运行时选项是什么意思。你的意思是通过休息服务之类的东西来休息吗。你想在应用程序运行时更改运行时的属性吗?我的意思是spring启动运行时选项设置spring.config、loader.path等。我只想使用classpath和jar。他们很欣赏答案,但我们正在尝试在不使用spring提供的运行时选项的情况下实现它。我在问题中添加了一个编辑。你知道一种与之相一致的方法吗?