写点什么

【Spring】配置文件优先级

作者:虚实的星空
  • 2024-11-12
    中国香港
  • 本文字数:1024 字

    阅读完需:约 3 分钟

1、Q:在 Spring Boot 中,Java 程序读取配置的优先级是怎么样的?

  1. 命令行参数:最高优先级,直接覆盖其他配置。java -jar your-app.jar --spring.config.name=custom-config

  2. SPRING_APPLICATION_JSON 环境变量内容。

  3. application.propertiesapplication.yml 位于 config 目录下。

  4. application.propertiesapplication.yml 在当前目录下。

  5. 类路径下的 config 包中的 application.propertiesapplication.yml

  6. 类路径根目录下的 application.propertiesapplication.yml

  7. @PropertySource 注解的配置文件

  8. 默认属性:由 SpringApplication.setDefaultProperties 指定。


2、总结:

1、优先级:命令行>操作系统环境变量>配置中心>配置文件-{active}>配置文件.properties>配置文件.yml

2、如果 Jar 包内外存在同名文件,Jar 包外文件优先

3、Springboot 服务启动时会按优先级搜寻所有的配置文件,但不是搜寻到就停止搜寻了;这意味着:所有配置文件中的属性配置都会被 Springboot 服务读取并使用到;且当这些配置文件中具有相同属性配置时,优先级高的配置文件中的属性配置会覆盖优先级低的

参考:https://docs.spring.io/spring-boot/reference/features/external-config.html

3、最佳实践

```

# 数据库配置

-Dspring.datasource.url=jdbc:mysql://localhost:3306/db

# JVM 参数

-Xms512m -Xmx1024m -XX:MaxPermSize=256m

# 应用参数

--server.port=8080 --spring.profiles.active=dev# 日志级别--logging.level.root=INFO

# 配置文件位置

--spring.config.location=classpath:/custom-config/

```


同时使用-D 和--参数时

```

java -Dserver.port=8080 -jar app.jar --server.port=9090

最终生效的是 --server.port=9090


因为命令行参数(--)优先级高于系统属性(-D)

java -jar app.jar --debug

```


查看特定配置

```

--trace

--logging.level.org.springframework=DEBUG


```

附录:明细 from Spring Doc

```

  1. 命令行参数 --spring.config.location 指定的配置文件

  2. 命令行参数 -D 指定的系统属性

  3. 命令行参数 -- 指定的应用参数

  4. @TestPropertySource 注解

  5. @SpringBootTest 注解的 properties 属性

  6. 环境变量 SPRING_APPLICATION_JSON

  7. ServletConfig 初始化参数

  8. ServletContext 初始化参数

  9. JNDI 属性

  10. Java 系统属性 System.getProperties()

  11. 操作系统环境变量

  12. random.* 属性

  13. jar 包外部的 application-{profile}.properties/yml

  14. jar 包内部的 application-{profile}.properties/yml

  15. jar 包外部的 application.properties/yml

  16. jar 包内部的 application.properties/yml

```


用户头像

Among Reality and Fantasy 2020-06-10 加入

日拱一卒

评论

发布
暂无评论
【Spring】配置文件优先级_spring_虚实的星空_InfoQ写作社区