当前位置: 首页 > news >正文

SpringBoot读取配置优先级顺序是什么?

Spring Boot外部化配置详解

在这里插入图片描述

目录

  1. 引言
  2. Spring Boot外部化配置概述
  3. 配置加载优先级
  4. 配置加载顺序详解
  5. 实际案例
  6. 总结

引言

Spring Boot因其“开箱即用”的特性,极大地简化了Java应用的开发和部署过程。它通过外部化配置机制,允许开发者根据不同的环境(如开发、测试、生产)灵活加载配置,而无需修改代码。本文将深入探讨Spring Boot加载外部配置属性的优先级规则,并结合实际案例,帮助你更好地理解和管理配置。


Spring Boot外部化配置概述

Spring Boot的外部化配置允许应用程序在不改变代码的情况下适应不同环境。配置属性可以从多种来源获取,包括:

  1. Properties文件:使用.properties格式,以键值对形式存储配置信息。

    server.port=8080
    logging.level.root=DEBUG
    
  2. YAML文件:提供更直观、层次分明的数据结构,适合复杂配置。

    server:port: 8080
    logging:level:root: DEBUG
    
  3. 环境变量:操作系统级别的环境变量,适合云环境和容器化部署。

  4. 命令行参数:启动应用时通过命令行参数覆盖配置。

配置属性可以通过以下方式注入到Bean中:

  • @Value注解:直接注入配置属性值。
  • Environment接口:查询所有已加载的配置。
  • @ConfigurationProperties注解:绑定一组相关配置到Java Bean中。

配置加载优先级

Spring Boot在加载配置时遵循一定的优先级顺序,从低到高依次为:

  1. 默认属性(通过SpringApplication.setDefaultProperties设置)
  2. @PropertySource注解加载的配置
  3. 内部配置文件(如application.properties
  4. 外部配置文件(如通过spring.config.location指定的文件)
  5. 特殊属性源(如随机值、环境变量、系统属性)
  6. 命令行参数
  7. 测试相关的属性注入(如@TestPropertySource

了解这些优先级规则对于确保配置的一致性和正确性至关重要。


配置加载顺序详解

1. 默认属性

默认属性是Spring Boot框架内置的配置值,可以通过SpringApplication.setDefaultProperties方法设置。这些属性会被加载,但可以被其他配置覆盖。

@SpringBootApplication
public class SpringBootBaseApplication {public static void main(String[] args) {Map<String, Object> defaultProperties = new HashMap<>();defaultProperties.put("server.port", "9000");SpringApplication app = new SpringApplication(SpringBootBaseApplication.class);app.setDefaultProperties(defaultProperties);app.run(args);}
}

2. @PropertySource注解

@PropertySource用于加载外部属性文件。这些文件在应用上下文刷新时被加载。

@PropertySource(value = "classpath:propertysource.properties")
@Configuration
public class MyConfig {
}

3. 内部配置文件

内部配置文件位于src/main/resources目录下,如application.properties。这些文件在应用启动时被加载。

4. 外部配置文件

外部配置文件可以放在应用根目录或通过spring.config.location指定的路径下。这些文件在应用启动时被加载。

5. 特殊属性源

  • 随机值:通过random.*生成随机值。

    random.int=100
    
  • 环境变量:通过操作系统环境变量设置配置。

    export MY_APP_PORT=8080
    
  • 系统属性:通过System.setProperty设置。

    System.setProperty("config.data.path", "SystemProperty");
    

6. 命令行参数

命令行参数通过--前缀设置,覆盖其他配置。

java -jar myapp.jar --server.port=8082

7. 测试相关的属性注入

在测试中,可以通过@TestPropertySource@SpringBootTest注入测试相关的配置。


实际案例

假设你正在开发一个问答小程序,需要根据环境加载不同的配置。你可以通过以下方式实现:

  1. 创建项目:在微信开发者工具中创建一个新项目。

  2. 配置文件:在application.properties中设置开发环境的配置。

    server.port=8080
    logging.level.root=DEBUG
    
  3. 环境变量:在生产环境中,通过环境变量设置配置。

    export SERVER_PORT=8081
    
  4. 命令行参数:在启动应用时,通过命令行参数覆盖配置。

    java -jar myapp.jar --server.port=8082
    

通过以上方式,你可以灵活地管理不同环境下的配置,确保应用的稳定运行。


总结

Spring Boot的外部化配置机制提供了强大的灵活性,允许开发者根据不同的环境加载相应的配置。了解配置加载的优先级规则,可以帮助你更好地管理配置,避免配置冲突。通过合理使用Properties文件、环境变量、命令行参数等,你可以高效地管理和迁移配置,确保应用在不同环境下的稳定运行。

http://www.lryc.cn/news/525755.html

相关文章:

  • VScode连接远程Linux服务器环境配置
  • 梯度下降法 (Gradient Descent) 算法详解及案例分析
  • docker 部署 java 项目详解
  • npm install 报错:Command failed: git checkout 2.2.0-c
  • Vue基础(2)
  • (长期更新)《零基础入门 ArcGIS(ArcScene) 》实验七----城市三维建模与分析(超超超详细!!!)
  • war包 | Docker部署flowable-ui
  • Java数据结构方面的面试试题以及答案解析
  • Qt 5.14.2 学习记录 —— 십구 事件
  • 国产编辑器EverEdit - 命令窗口应用详解
  • iOS开发设计模式篇第二篇MVVM设计模式
  • 【深度学习】3.损失函数的作用
  • 深入MapReduce——计算模型设计
  • 小黑日常积累:学习了CROSS APPLY字段,将sqlserver中字段通过分隔符拆分并统计
  • WebSocket知识点笔记(一)
  • 安宝特方案 | AR在供应链管理中的应用:提升效率与透明度
  • 基于Springboot + vue实现的美发门店管理系统
  • springboot中配置logback-spring.xml
  • 从63 秒到 0.482 秒:深入剖析 MySQL 分页查询优化
  • 细说机器学习算法之过拟合与欠拟合
  • C/C++ 虚函数
  • 【3GPP】【5G】注销流程(Deregistration procedures)
  • 【小游戏篇】三子棋游戏
  • 7-Zip Mark-of-the-Web绕过漏洞复现(CVE-2025-0411)
  • 2025年国产化推进.NET跨平台应用框架推荐
  • 关于ARM和汇编语言
  • 2024人工智能AI+制造业应用落地研究报告汇总PDF洞察(附原数据表)
  • QTableView和QTableWidget的关系与区别
  • Java导出通过Word模板导出docx文件并通过QQ邮箱发送
  • ESP8266 MQTT服务器+阿里云