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

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.kler.cn/a/516089.html

相关文章:

  • .NET 9 微软官方推荐使用 Scalar 替代传统的 Swagger
  • MySQL基于gtid的主从同步配置
  • 【2024年华为OD机试】(B卷,100分)- 数据分类 (Java JS PythonC/C++)
  • WPF 引发类型为“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常 解决办法
  • 【Unity】ScrollViewContent适配问题(Contentsizefilter不刷新、ContentSizeFilter失效问题)
  • 小型分布式发电项目优化设计方案
  • 【记录自开发的SQL工具】工具字符拼接、Excel转sql、生成编码、生成测试数据
  • verilog笔记1
  • jmeter中对接口进行循环请求后获取相应数据
  • 智能工厂数字化化集成落地项目(交付版 67页)PPT 解读
  • K8S 快速实战
  • 【ARTS】【LeetCode-704】二分查找算法
  • 洛谷刷题1-3
  • Java如何实现反转义
  • 【Ubuntu】安装SSH启用远程连接
  • UE 像素流Pixel Streaming笔记
  • 五种高频设计模式及其在 Spring 中的应用揭秘
  • Git克隆 提示证书验证失败解决
  • Python OrderedDict 实现 Least Recently used(LRU)缓存
  • 【易康eCognition实验教程】002:创建工作空间、工程
  • 分布式光纤应变监测是一种高精度、分布式的监测技术
  • element tbas增加下拉框
  • Windows Server 虚拟化环境中SR-IOV网络I/O增强功能
  • HTML5 常用事件详解
  • JavaScript图像处理,常用图像边缘检测算法简单介绍说明
  • 51 单片机矩阵键盘密码锁:原理、实现与应用