SpringBoot配置文件

1、配置的优先级

下面这两个配置方式,不会被打到jar包里,只在IDEA中生效

你可以在执行java -jar命令时,加上这两个配置属性使其生效

(1)五种配置的优先级

SpringBoot项目支持多种配置方式,主要包括配置文件(application.properties、.yml、.yaml)和外部配置(如系统属性、命令行参数)。 优先级由高到低为:命令行参数 > 系统属性 > .properties > .yml > .yaml。

2、如果项目已经打成jar包部署到服务器上,那该怎么修改配置(文件)呢?

打成jar包需要引入一个东西

(1)外置配置文件

方案一:外置 application.properties(Spring Boot 标准配置文件)

Spring Boot 为 application.properties / application.yml 提供了默认的外部加载机制,查找路径及优先级如下(优先级从高到低):

  1. 当前目录下的 /config 子目录

  2. 当前目录

  3. classpath 下的 /config 包(jar包内部)

  4. classpath 根目录(jar包内部)

操作与验证:

  1. 在项目中定义属性(如 demo.name=hello.01)并打包为 app.jar。

  2. 将 application.properties 拷贝到与 app.jar 同级目录 或 同级下的 /config 目录。

  3. 修改外部配置文件中的属性值(如改为 demo.name=hello.02)。

  4. 使用 java -jar app.jar 启动,应用将自动加载外部配置并覆盖 Jar 包内的默认值。

自定义目录:

若配置文件放在其他目录(如 ./conf/),则需通过启动参数显式指定路径:

bash 复制代码
# 使用相对路径
java -jar app.jar --spring.config.location=conf/application.properties
# 使用绝对路径
java -jar app.jar --spring.config.location=/absolute/path/application.properties

方案二:外置自定义 .properties 文件

对于通过 @PropertySource 注解加载的自定义配置文件(如 demo.properties),Spring Boot 不会自动从外部加载。需要修改代码配置来实现外置。

解决方案:配置多路径并允许资源缺失

  1. 修改 @PropertySource 注解,同时指定 classpath 内和外部文件路径,并将外部路径置于后面(后者覆盖前者)。

  2. 添加 ignoreResourceNotFound = true,避免因找不到外部文件而启动失败。

示例代码:

java 复制代码
@Configuration
@ConfigurationProperties(prefix = "demo")
@PropertySource(value = {"classpath:demo.properties", "file:./demo.properties"}, ignoreResourceNotFound = true)
public class DemoProperties {
    private String nickname;
    // getter/setter...
}

原理:

  • 本地开发时 :通常不存在 ./demo.properties,因此加载 classpath 内的配置。

  • 生产部署时 :将 demo.properties 置于 Jar 包同级目录,应用会加载此外部文件,并覆盖 Jar 包内的默认配置。

特性 application.properties (标准配置) 自定义 .properties 文件
外部加载 天然支持,按默认优先级自动加载。 不支持,需通过代码配置实现。
默认外部路径 ./config/, ./, classpath:/config/, classpath:/ 无,需手动指定。
自定义外部路径 通过 --spring.config.location 参数指定。 在 @PropertySource 的 value 中指定文件路径(如 file:./)。
配置方式 无需修改代码,遵循约定。 需修改 @PropertySource,配置多路径并设置 ignoreResourceNotFound=true。
优先级策略 外部文件 > Jar 包内部文件。 靠后的路径配置会覆盖前面的(文件系统路径通常放在最后)。

思考:application.properties (标准配置)和自定义 .properties 文件 如果设置了相同属性,谁的优先级高呢?

答:标准配置的优先级高。(默认是这样的,但是具体情况具体分析)

(2)通过命令加上特定的系统属性和命令行参数

相关推荐
杨杨杨大侠6 小时前
都能接模型、RAG 和 MCP,Java Agent 框架到底差在哪?
java
凤山老林6 小时前
Spring Boot 启动冲刺:耗时剖析、懒加载策略与事件驱动初始化优化
spring boot·后端·python
Thinker QAQ7 小时前
并发编程(九):BlockingQueue 与 Channel——语言层的原子性、可见性与有序性
java·python·go·并发编程·channel·blockingqueue·message passing
霸道流氓气质8 小时前
RAG 可观测性与生产监控实战:四层遥测模型、五大仪表盘与 OpenTelemetry 全链路追踪的 Java 生产级实现
java·人工智能·python
AOI小白新手上路8 小时前
autodl常用的tar 打包下载(数据集)命令手册:逐段拆解与套用模板
java·大数据·数据库
dishugj10 小时前
系统架构风险点、敏感点和权衡点的概念和区分
java·开发语言
苜蓿muxu10 小时前
常用代码命名规范
java
马优晨11 小时前
JAVA 中 VO 实体类是什么意思,为什么要做这个
java·开发语言·状态模式·java vo·java vo是什么
Baron X11 小时前
Eclipse Temurin 21 (JRE) Alpine 镜像获取、离线导入与推送操作
java·docker·eclipse·temurin