spring.config.location会影响jar包内部的配置文件读取么

在Spring Boot中,设置 spring.config.location 会影响默认的配置文件加载行为,包括对JAR包内部配置文件的读取。具体规则如下:


1. 默认行为(未设置 spring.config.location

  • Spring Boot会按照默认顺序加载配置文件(如 application.propertiesapplication.yml),包括:
    • JAR包内部的 classpath:/(如 src/main/resources
    • JAR包内部的 classpath:/config/
    • 当前目录下的 /config 子目录
    • 当前目录
  • 此时会正常读取JAR内部的配置文件

2. 设置 spring.config.location 后的行为

  • 该属性会覆盖默认的配置搜索路径
  • 如果通过命令行、环境变量或系统属性指定了 spring.config.location,Spring Boot 仅会从你指定的位置加载配置,而不再检查默认路径(包括JAR内部)。
  • 示例
    java -jar app.jar --spring.config.location=file:/etc/app/
    
    此时应用只会/etc/app/ 目录查找配置文件,不会读取JAR内部的配置

3. 如何同时加载JAR内部和外部配置?

如果需要保留默认路径(包括JAR内部)并追加自定义路径,应使用 spring.config.additional-location

java -jar app.jar --spring.config.additional-location=file:/etc/app/

此时配置加载顺序为:

  1. 默认路径(包括JAR内部)
  2. 自定义路径(如 /etc/app/

4. 显式包含JAR内部路径

如果仍希望加载JAR内部配置,需在 spring.config.location显式包含 classpath:/

java -jar app.jar --spring.config.location=classpath:/,file:/etc/app/

此时会按顺序加载:

  1. JAR内部的 classpath:/
  2. 外部目录 /etc/app/

5. 总结

场景 JAR内部配置是否加载
未设置 spring.config.location ✅ 是
设置 spring.config.location ❌ 否(除非显式包含 classpath
设置 spring.config.additional-location ✅ 是(追加外部配置)

6. 验证配置加载顺序

可以通过启用Spring Boot的调试日志查看实际加载的配置文件和路径:

# application.properties
debug=true

日志中会输出所有加载的配置文件及其顺序。

你可能感兴趣的:(spring,jar,java)