锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. JAVA
  4. SpringBoot配置文件高级用法实战

SpringBoot配置文件高级用法实战

0
  • JAVA
  • 发布于 2024-08-16
  • 0 次阅读
黄健
黄健

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net

❃博主首页 : 「码到三十五」 ,同名公众号 :「码到三十五」,wx 号 : 「liwu0213」
☠博主专栏 : <mysql 高手> <elasticsearch 高手> <源码解读> <java 核心> <面试攻关>
♝博主的话 : 搬的每块砖,皆为峰峦之基;公众号搜索「码到三十五」关注这个爱发技术干货的 coder,一起筑基

Spring Boot 配置文件的优先级是一个重要的概念,它决定了当存在多个配置文件时,哪个配置文件中的配置将被优先采用。

文章目录

      • 一、总体优先级顺序
      • 二、应用配置文件的详细优先级
      • 三、文件类型优先级
      • 四、特定环境配置
      • 五、配置文件高级用法
          • 5.1 修改配置文件名
          • 5.2 修改配置文件位置
          • 5.3 使用文件系统路径
          • 5.4 附加配置文件
          • 5.5 可选位置
          • 5.6 通配符位置
          • 5.7 特定配置文件
          • 5.8 导入其它配置
          • 5.9 导入无扩展文件
      • 六、多配置文件处理方式
        • 背景需求
        • 解决方法一
        • 解决方法二

一、总体优先级顺序

  1. 命令行参数:通过命令行启动参数指定的配置拥有最高优先级。这包括java -jar命令后跟随的配置参数。

  2. 来自SPRING_APPLICATION_JSON的属性:嵌入在环境变量或系统属性中的 JSON 格式配置信息,优先级仅次于命令行参数。

  3. 系统属性:通过 Java 系统属性传递的配置值,例如使用-D参数设置的值。

  4. 环境变量:操作系统环境变量中的配置值。

  5. 随机生成的属性(仅用于开发中的随机端口号等):Spring Boot 在开发环境中可以随机生成一些属性,例如随机端口号。

  6. 应用配置文件(application.properties或application.yml):按照特定顺序加载的配置文件。

  7. 在@Configuration类中通过@PropertySource注解定义的属性:通过编程方式指定的配置文件。

  8. 默认属性(通过SpringApplication.setDefaultProperties指定的默认属性):这些属性在所有其他特定属性源之后加载,因此优先级最低。

二、应用配置文件的详细优先级

对于application.properties或application.yml等应用配置文件,Spring Boot 按照以下顺序加载,优先级从高到低:

  1. 命令行中指定的配置文件:通过--spring.config.location参数指定的配置文件。

  2. 项目目录下的config子目录:位于项目根目录下的config(和 jar 包同一目录) 文件夹中的配置文件。

  3. 项目根目录:项目根目录 (和 jar 包同一目录) 下的配置文件。

  4. 类路径下的config包:src/main/resources/config目录中的配置文件。

  5. 类路径根目录:src/main/resources目录中的配置文件。

特别注意的是, 配置文件内容是在的合并的前提下执行优先级, 即不重复的配置内容会合并!

三、文件类型优先级

在同一位置下,如果存在多种类型的配置文件(如.properties、.yml、.yaml),它们的优先级顺序为:

  1. .properties
  2. .yml
  3. .yaml

四、特定环境配置

当使用特定环境的配置文件(如application-dev.yml、application-prod.yml)时,激活的特定环境配置文件将覆盖通用配置文件中的相同属性。如果指定了多个特定环境配置文件,则后面的配置文件将覆盖前面的配置文件中的相同属性。

五、配置文件高级用法

假设有以下配置文件:

  • 类路径根目录下application.yml内容:

    pack:
      name: root-name
      age: 11
    
  • 类路径config包下application.yml内容:

    pack:
      name: classpath/config-name
    

读取配置pack.name和pack.age,输出结果为:

name = classpath/config-name, age = 11

这验证了配置文件内容的合并以及优先级规则。

5.1 修改配置文件名

使用spring.config.name环境属性可以修改默认的配置文件名:

java -jar springboot-configfile-1.0.0.jar --spring.config.name=pack
5.2 修改配置文件位置

使用spring.config.location环境属性指定配置文件的位置:

java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/pack.yml,optional:classpath:/config/pack1.yml

使用optional:前缀可以忽略文件不存在的错误。也可以指定目录让 Spring Boot 自动拼接文件名:

java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/config/ --spring.config.name=pack
5.3 使用文件系统路径

指定文件系统中的配置文件路径:

java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/pack.yml,optional:file:f:/
--spring.config.name=pack
5.4 附加配置文件

如需要添加其它的配置文件,并非是替换默认的配置文件, 可从附加位置加载属性 (可以覆盖默认位置中的属性值)。

使用spring.config.additional-location加载额外的配置文件:

java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/pack.yml --spring.config.name=pack --spring.config.additional-location=optional:file:f:/pack-akf.yml
5.5 可选位置

默认当指定的配置数据文件不存在时,SpringBoot 会抛出 ConfigDataLocationNotFoundException 异常,应用程序将无法启动.

使用optional:前缀忽略配置文件不存在的错误:

java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/pack.yml --spring.config.on-not-found=ignore

忽略所有 ConfigDataLocationNotFoundException 并始终继续启动应用程序,可以使用 spring.config.on-not-found 属性

5.6 通配符位置

如配置文件位置的最后一个路径段包含 * 字符,则视为通配符位置。通配符会在加载配置时展开,因此直接子目录也会被检查, 使用通配符加载多个配置文件:

… 代码省略, 请看下面的获取方式

5.7 特定配置文件

… 代码省略, 请看下面的获取方式

5.8 导入其它配置

在配置文件中使用 spring.config.import 属性从其他位置导入更多配置数据。导入会在被发现时被处理,并被视为紧接在声明导入的文档下面插入的附加文档:

pack:
  name: root name    
  age: 66
---  
spring:
  config:
    import:
    - file:f:/pack-akf.yml

*** … 代码省略… 完整代码请关注博主公众号 [码到三十五] 回复 [ springboot ] 自动获取…***

5.9 导入无扩展文件

… 代码省略…

六、多配置文件处理方式

背景需求

程序在部署的时候,一般是将配置文件放在 jar 包的外面,而当存在多个文件需要加载时, 如项目中有:

cfg1.properties
cfg2.properties
解决方法一

合并所有配置文件至一个文件中配置加载,然后使用 spring.config.location 配置加载。
把 cfg1.properties 和 cfg2.properties 中的配置都合并至 cfg.properties 中。

java -jar app.jar --spring.config.location=file:/path/to/cfg.properties
解决方法二

保持文件的各自独立,使用 spring.config.location 属性来指定应用程序的配置文件路径。可以指定多个配置文件,使用逗号分隔的文件路径,例如:

java -jar api.jar --spring.config.location=file:/path/cfg1.properties,file:/path/cfg2.properties

关注公众号 [码到三十五] 获取更多技术干货 !

标签: #软件开发 1171 #JAVA 991
相关文章

Spring 实现 3 种异步接口 2024-10-18 09:07

大家好,我是苏三~ 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性,处理结果仅返回单个值。在某些场景下,如果需要接口异步处理的同时,还持续不断地

重学SpringBoot3-集成Redis(五)之布隆过滤器 2024-10-08 11:24

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器? * 基本概念 适用场景 2. 使用 Redis 实现布隆过滤器 * 项目依赖 Redis 配置

SpringBoot整合异步任务执行 2024-10-08 11:24

同步任务: 同步任务是在单线程中按顺序执行,每次只有一个任务在执行,不会引发线程安全和数据一致性等 并发问题 同步任务需要等待任务执行完成后才能执行下一个任务,无法同时处理多个任务,响应慢,影响用 户体验 异步任务: 异步任务是在多线程中同时执行,多个任务可以并发执行,同时处理多个请求,响应快,资源

springboot kafka多数据源,通过配置动态加载发送者和消费者 2024-10-08 11:24

前言 最近做项目,需要支持kafka多数据源,实际上我们也可以通过代码固定写死多套kafka集群逻辑,但是如果需要不修改代码扩展呢,因为kafka本身不处理额外逻辑,只是起到削峰,和数据的传递,那么就需要对架构做一定的设计了。 准备test kafka本身非常容易上手,如果我们需要单元测试,引入ja

SpringBoot 集成 Redis 2024-10-08 11:24

一:SpringBoot 集成 Redis ①Redis是一个 NoSQL(not only)数据库, 常作用缓存 Cache 使用。 ②Redis是一个中间件、是一个独立的服务器;常用的数据类型: string , hash ,set ,zset , list ③通过Redis客户端可以使用多种语

SpringBoot整合QQ邮箱 2024-10-08 11:24

SpringBoot可以通过导入依赖的方式集成多种技术,这当然少不了我们常用的邮箱,现在本章演示SpringBoot整合QQ邮箱发送邮件…. 下面按步骤进行: 1.获取QQ邮箱授权码 1.1 登录QQ邮箱 1.2 开启SMTP服务 找到下图中的SMTP服务区域,如果当前账号未开启的话自己手动开启。

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.