SpringBoot配置加载机制

news2024/9/21 4:33:05

目录

前言

官方文档:SpringBoot配置加载机制

 外化配置加载顺序

application.properties默认位置

命名风格

Spring Boot 中的 @ConfigurationProperties

定制PropertySource

主要步骤

切入位置

加载自定义properties文件

自定义文件(yapf.properties)


前言

我们用springboot都知道有很多配置项,配置文件,比如application.properties。Spring Boot允许您将配置外部化,以便您可以在不同的环境中使用相同的应用程序代码。您可以使用各种外部配置源,包括Java财产文件、YAML文件、环境变量和命令行参数。

官方文档:
SpringBoot配置加载机制

 外化配置加载顺序

官方文档中文献

 顺序从上到下

  • 开启 DevTools 时,~/.spring-boot-devtools.properties

        只要类路径上的文件发生更改,使用 spring-boot-devtools 的应用程序就会自动重新启动。在1DE中工作时,这可能是一个有用的功能,因为它为代码更改提供了非常快速的反循环。默认情况下,将监视类路径上指向文件央的任何条目的更改。请注意,某些资源( 如静态资产和视图模板 )无需重新启动应用程序。       

  • 测试类上的 @TestPropertySource 注解
  • @SpringBootTest#properties 属性
  • 命令⾏参数( --server.port=9000 )

        我们可以通过( --server.port=9000 )命令行参数覆盖掉默认端口号8080

  • SPRING_APPLICATION_JSON 中的属性
  • ServletConfig 初始化参数
  • ServletContext 初始化参数
  • java:comp/env 中的 JNDI 属性
  • System.getProperties()

        ( java -D) 参数指定的一些属性,可以通过(-D)来指定系统属性

  • 操作系统环境变量

将Linux中设置的环境变量作为一个配置加载进了

  • random.* 涉及到的 RandomValuePropertySource
RandomValuePropertySource可用于注入随机值(例如,进入机密或测试用例),可以生成整数、long、uuid或字符串
my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.uuid=${random.uuid}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}
  • jar 包外部的 application-{profile}.properties 或 .yml
  • jar 包内部的 application-{profile}.properties 或 .yml
  • jar 包外部的 application.properties 或 .yml
  • jar 包内部的 application.properties 或 .yml
  • @Configuration 类上的 @PropertySource
  • SpringApplication.setDefaultProperties() 设置的默认属性

application.properties默认位置

     1、当前路径下 

                当前路径下:(/)

                当前路径下config目录里:(./config)

     2、CLASSPATH上面

                CLASSPATH根目录:(/)

                CLASSPATH下config目录里:(./config)

 修改application.properties

修改名字:

spring.config.name=dev

指定路径下配置文件替换application.properties:
spring.config.location="D:/xxx文件夹/application.yml"

追加配置文件:
spring.config.additional-location="D:/xxx文件夹"

命名风格

  • Properties 文件YAML文件系统属性

短划线分隔

start.spring-boot.high-demo
驼峰式
start.springBoot.highDemo
下划线分隔

start.spring_boot.high_demo

  • 环境变量

全大写,下划线分隔

START_SPRINGBOOT_HIGHDEMO

Spring Boot 中的 @ConfigurationProperties

该注解可以将属性绑定到结构化对象上,即通过对象来做属性的绑定,并且支持 Relaxed Binding与安全的类型转换,通过在配置类上加上@EnableConfigurationProperties 注解开启ConfigurationProperties支持。

定制PropertySource

主要步骤

第一步、实现 PropertySource<T>。

第二布、从Environment 取得 PropertySources

第三步、将 PropertySource 添加到合适的位置

切入位置

EnvironmentPostProcessor

BeanFactoryPostProcessor

加载自定义properties文件

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.boot.env.PropertiesPropertySourceLoader;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

@Slf4j
public class YapfEnvironmentPostProcessor implements EnvironmentPostProcessor {
    private PropertiesPropertySourceLoader loader = new PropertiesPropertySourceLoader();
    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        MutablePropertySources propertySources = environment.getPropertySources();
        Resource resource = new ClassPathResource("yapf.properties");
        try {
            PropertySource ps = loader.load("YetAnotherPropertiesFile", resource)
                    .get(0);
            propertySources.addFirst(ps);
        } catch (Exception e) {
            log.error("Exception!", e);
        }
    }
}

自定义文件(yapf.properties)

geektime.greeting=hello

测试:

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@Slf4j
public class PropertySourceDemoApplication implements ApplicationRunner {
	@Value("${geektime.greeting}")
	private String greeting;

	public static void main(String[] args) {
		SpringApplication.run(PropertySourceDemoApplication.class, args);
	}

	@Override
	public void run(ApplicationArguments args) throws Exception {
		log.info("{}", greeting);
	}
}

注:原文内容来源于极客时间-丁雪丰 -玩转spring全家桶

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/417013.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PM866-2 3BSE050201R1未来的工业将会更加智能化。

PM866-2 3BSE050201R1未来的工业将会更加智能化。 ​ 从工业到智慧工业&#xff0c;半导体厂商可以做什么&#xff1f; 从第一次工业革命开始到现在&#xff0c;工业领域发生了翻天覆地的变化&#xff0c;现在及未来的工业将会更加智能化。 意法半导体&#xff08;ST&#xf…

南卡全新开放式OE Pro蓝牙耳机震撼上市,行业新标杆,再迎巅峰

近日&#xff0c;Nank南卡全新发布了一款不入耳开放式蓝牙耳机&#xff0c;创新打破无限可能。根据目前透露&#xff0c;新发布的南卡OE Pro不管是音质还是佩戴舒适度都一如既往的好&#xff0c;比市场内其他品牌的开放式耳机要高出几倍&#xff0c;各大媒体猜测&#xff0c;Na…

AI作画生成器,AI作画的优缺点

AI作画生成器&#xff0c;AI作画生成是一种基于人工智能技术的艺术创作方式&#xff0c;其在过去几年中得到了广泛应用和迅速发展。本文将以此为题&#xff0c;从几个方面来探讨AI作画生成。 一.什么是AI作画生成 AI作画生成&#xff0c;顾名思义&#xff0c;指的是使用人工智…

wifi理论数据速率计算

经常看到这样的数据&#xff0c;下面是802.11n协议&#xff0c;2X2天线的理论数据速率。&#xff1a; 下面我们就来了解下这是怎么计算出来的。 影响因素 速率的计算需要考虑的因素包括&#xff1a;调制方式、码率、子载波个数&#xff08;带宽和协议模式不同&#xff0c;子载…

RK3399平台开发系列讲解(基础篇)延迟和定时器管理

🚀返回专栏总目录 文章目录 一、标准定时器1.1、jiffy和HZ1.2、定时器API二、高精度定时器(HRT)三、动态Tick/Tickless内核四、内核中的延迟和睡眠4.1、原子上下文4.2、非原子上下文沉淀、分享、成长,让自己和他人都能有所收获!😄 📢时间是继内存之后常用的资源之一。…

细说synchronized 加锁 this 和 class 的区别

介绍 synchronized 是 Java 语言中处理并发问题的一种常用手段&#xff0c;它也被我们亲切的称之为“Java 内置锁”&#xff0c;由此可见其地位之高。然而 synchronized 却有着多种用法&#xff0c;当它修饰不同对象时&#xff0c;其意义也是不同的&#xff0c;下面我们一起来…

macOS Monterey 12.6.5 (21G531) Boot ISO 原版可引导镜像

本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。另外也支持在 Windows 和 Linux 中创建可引导介质。 2023 年 4 月 10 日&#xff08;北京…

VIM编辑常用命令

本贴为学习小甲鱼【VIM快速入门】时的笔记&#xff0c;视频链接&#xff1a;【VIM快速入门】《带你学C带你飞》&#xff08;番外篇&#xff09; VIM是Linux系统下强大的编辑器&#xff0c;能够方便使用者提升效率。 VIM 具有 6 种基本模式和 5 种派生模式。 基本模式&#xff…

获取淘宝商品分类详情API,抓取淘宝全品类目API接口分享(代码展示、参数说明)

商品分类技巧 淘宝店铺分类怎么设置&#xff1f;我们登录卖家账号的时候&#xff0c;我们看到自己的商品&#xff0c;会想要给商品进行分类&#xff0c;一个好的分类可以帮助提高商品的曝光率。那么在给商品分类前&#xff0c;如果您毫无头绪&#xff0c;以下几点可以给您带来…

Vue.js 2.0 状态管理

类 Flux 状态管理的官方实现 由于多个状态分散的跨越在许多组件和交互间各个角落&#xff0c;大型应用复杂度也经常逐渐增长。为了解决这个问题&#xff0c;Vue 提供 vuex&#xff1a; 我们有受到 Elm 启发的状态管理库。vuex 甚至集成到 vue-devtools&#xff0c;无需配置即可…

详解linux多线程——互斥锁、条件变量、读写锁、自旋锁、信号量

一、互斥锁&#xff08;同步&#xff09; 在多任务操作系统中&#xff0c;同时运行的多个任务可能都需要使用同一种资源。这个过程有点类似于&#xff0c;公司部门里&#xff0c;我在使用着打印机打印东西的同时&#xff08;还没有打印完&#xff09;&#xff0c;别人刚好也在此…

华为ADS 2.0智驾助力阿维塔成为智能电动汽车领军品牌

随着科技的不断发展和智能化的迅速崛起&#xff0c;智能电动汽车已经成为当今汽车行业的热点话题。在这一领域&#xff0c;中国汽车品牌阿维塔科技近日引人瞩目地成为了首批搭载华为ADS 2.0智驾系统的品牌。在2023年4月16日举行的华为智能汽车解决方案发布会上&#xff0c;阿维…

HCIA第二次笔记

目录 OSI/RM七层参考模型——开放式的系统互联参考模型 核心——分层 TCP/IP模型——TCP/IP协议簇 应用层 应用层协议 封装与解封装 传输层 TCP协议和UDP协议的区别 TCP的报文 TCP的三次握手 TCP的四次挥手 TCP的四种可靠传输机制 OSI/RM七层参考模型——开放式的系…

单链表经典面试题 (动图解析)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

Lars bak

&#xff08;1&#xff09;先从smalltalk说起上回书《阿伦凯(Alan Kay)》咱们说到世界上第一个基于语言虚拟机的编程语言Smalltalk&#xff0c;以及它的创造者&#xff1a;Alan kay。今天我再沿着语言虚拟机这条路&#xff0c;再走向系统虚拟机《虚拟机&#xff1a;IBM-S/360-O…

WebServer项目(一)->计网知识补充

WebServer项目->计网知识补充1.网络结构模式C/S结构B/S结构2.MAC 地址3.IP 地址1)IP 地址编址方式2)A类IP地址3)B类IP地址4)C类IP地址5)D类IP地址(了解)6)特殊的网址7)子网掩码4.端口5.网络模型1)OSI 七层参考模型&#xff08;Open System Interconnection&#xff09;2)TCP…

测试开发岗 - 一面复盘

1. 什么是软件测试&#xff0c; 谈谈你对软件测试的了解 软件测试就是验证产品特性是否符合用户需求, 软件测试贯穿于软件的整个生命周期. >>> 那软件测试具体是什么呢 ? 就拿生活中的例子来说, 比如说我们去商场买衣服, 会有以下几个步骤 : 第一步: 我们会走进门店…

SSM版本个人博客系统实现

SSM版本的个人博客系统 文章目录SSM版本的个人博客系统统一的数据返回处理关于前端的一些问题实现注册功能实现登录的功能存储session获取用户的信息获取左侧的个人信息获取右侧的博客列表时间格式化删除操作注销功能&#xff08;退出登录&#xff09;查看文章的详情页排查问题…

机器人项目与产品开发

ROS&#xff08;Robot Operating System&#xff09; ROS&#xff08;Robot Operating System&#xff09;是一个开源的机器人操作系统&#xff0c;旨在为机器人软件开发提供一个通用的、模块化的、分布式的软件平台。ROS由加州大学伯克利分校机器人实验室开发&#xff0c;目前…

一图看懂 xlwings 模块:基于 BSD 协议在 Excel 中方便调用 Python 库(反之亦然), 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 xlwings 模块&#xff1a;基于 BSD 协议在 Excel 中方便调用 Python 库&#xff08;反之亦然&#xff09;, 资料整理笔记&#xff08;大全&#xff09;摘要模块图类关系图模…