SpringBoot 属性配置解析

news2024/11/29 20:36:22

属性配置介绍

spring官方提供的17中属性配置的方式

  1. Devtools全局配置
  2. 测试环境@TestPropertySource注解
  3. 测试环境properties属性
  4. 命令行参数
  5. SPRING_APPLICATION_JSON属性
  6. ServletConfig初始化参数
  7. ServletContext初始化参数
  8. JNDI属性
  9. JAVA系统属性
  10. 操作系统环境变量
  11. RandomValuePropertySource随机值属性
  12. jar包外的application-{profile}.properties
  13. jar包内的application-{profile}.properties
  14. jar包外的application.properties
  15. jar包内的application.properties
  16. @PropertySource绑定配置
  17. 默认属性

Spring Aware介绍

Aware介绍

  • Spring框架优点:Bean感知不到容器的存在
  • 使用场景:需要使用Spring容器的功能资源
  • 引入缺点:Bean和容器强耦合

常用Aware

Aware调用

自定义实现Aware

import org.springframework.beans.factory.Aware;

public interface MyAware extends Aware {

    void setFlag(Flag flag);

}
@Component
public class MyAwareProcessor implements BeanPostProcessor {

    private final ConfigurableApplicationContext configurableApplicationContext;

    public MyAwareProcessor(ConfigurableApplicationContext configurableApplicationContext) {
        this.configurableApplicationContext = configurableApplicationContext;
    }

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        if (bean instanceof Aware) {
            if (bean instanceof MyAware) {
                ((MyAware) bean).setFlag((Flag) configurableApplicationContext.getBean("flag"));
            }
        }
        return bean;
    }
}

Environment解析

getOrCreateEnvironment

  • 添加servletConfigInitParams属性集
  • 添加servletContextInitParams属性集
  • 添力Jndi属性集
  • 添加systemProperties属性集
  • 添加systemEnvironment属性集

configureEnvironment

  • 添加defaultProperties厲性集
  • 添加commandLineArgs属性集

listener.environmentPrepared

  • 添加spring_application_json属性集
  • 添加vcap属性集
  • 添加random属性集
  • 添加application-profile.(properties | yml)属性集

ConfigurationPropertySources.attach

  • 添加configurationProperties属性集

ConfigurationClassParser

  • 添加@PropertySources属性集

Spring profile介绍

将不同的参数配置绑定在不同的环境

默认使用

  • application.properties
  • application-default.properties

激活profile

  • spring.profiles.active=xx
  • spring.profiles.activedefault互斥(即配置active后application-default.properties会失效)

Spring profile原理解析

源码流程解析

处理入口

initializeProfiles逻辑

profiles处理

profile处理逻辑

Load逻辑

addLoadedPropertySources

面试题

  • SpringBoot属性配置方式有哪些?
  • 介绍下Spring Aware的作用及常见的有哪些?
  • Spring Aware注入原理?
  • 动手写一个Spring Aware?
  • Environment对象是如何加载属性集的?
  • 部分属性集如spring_application_json何时被加载的?
  • 介绍下Spring Profile?常用配置方式?
  • Spring Profile配置方式有哪些注意事项,为什么?
  • Spring Profile处理逻辑?

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

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

相关文章

9大高效的前端测试工具与框架!

在每个Web应用程序中,作为用户直接可见的应用程序外观,“前端”包括:图形化的用户界面、相应的功能、及其整体站点的可用性。我们可以毫不夸张地说:如果前端无法正常工作,您将无法“拉新”网站的潜在用户。这也正是我们…

HarmonyOS4.0从零开始的开发教程02初识ArkTS开发语言(上)

HarmonyOS(二)初识ArkTS开发语言(上)之TypeScript入门 前言 Mozilla创造了JS,Microsoft创建了TS,而Huawei进一步推出了ArkTS。因此在学习使用ArkTS前,需要掌握基本的TS开发技能。 从最初的基…

Kafka 的消息格式:了解消息结构与序列化

Kafka 作为一款高性能的消息中间件系统,其消息格式对于消息的生产、传输和消费起着至关重要的作用。本篇博客将深入讨论 Kafka 的消息格式,包括消息的结构、序列化与反序列化,以及一些常用的消息格式选项。通过更丰富的示例代码和深入的解析&…

人工智能-编译器和解释器

编译器和解释器 命令式编程使用诸如print、“”和if之类的语句来更改程序的状态。 考虑下面这段简单的命令式程序: def add(a, b):return a bdef fancy_func(a, b, c, d):e add(a, b)f add(c, d)g add(e, f)return gprint(fancy_func(1, 2, 3, 4)) 10 Python…

【分布式微服务专题】从单体到分布式(一、SpringCloud项目初步升级)

目录 前言阅读对象阅读导航前置知识笔记正文一、单体服务介绍二、服务拆分三、分布式微服务升级前的思考3.1 关于SpringBoot/SpringCloud的思考【有点门槛】 四、SpringCloud升级整合4.1 新建父子项目 学习总结感谢 前言 从本节课开始,我将自己手写一个基于SpringC…

谷歌刚刚发布了Gemini 1.0,采用了OpenAI的GPT4

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 对于谷歌和安卓来说,这是一个重要时刻。谷歌刚刚发布了 Gemini 1.0,这是其最新的LLM,它采用了 OpenAI 的 GPT4。 共有三种不同…

WPF仿网易云搭建笔记(0):项目搭建

文章目录 前言项目地址项目Nuget包搭建项目初始化项目架构App.xaml引入MateralDesign资源包 项目初步分析将标题栏去掉DockPanel初步布局 资源字典举例 结尾 前言 最近在找工作,发现没有任何的WPF可以拿的出手的工作经验,打算仿照网易云搭建一个WPF版本…

深度解析 Kafka 中的 Offset 管理与最佳实践

Kafka 中的 Offset(偏移量)是消息处理的关键元素,对于保证消息传递的可靠性和一致性至关重要。本篇博客将深度解析 Kafka 中的 Offset 管理机制,并提供丰富的示例代码,让你更全面地理解 Offset 的原理、使用方法以及最…

鸿蒙Harmony ArkUI十大开源项目

一 OH哔哩 https://gitee.com/ohos_port/ohbili 项目简介 【OH哔哩】是一款基于OpenHarmony系统ArkUI框架开发的哔哩哔哩动画第三方客户端 用到的三方库 bilibili-API-collect 哔哩哔哩-API收集整理ohos_ijkplayer 基于FFmpeg的视频播放器PullToRefresh 下拉刷新、上拉加载组件…

html通过CDN引入Vue组件抽出复用

html通过CDN引入Vue组件抽出复用 近期遇到个需求,就是需要在.net MVC的项目中,对已有的项目的首页进行优化,也就是写原生html和js。但是咱是一个写前端的,写html还可以,.net的话,开发也不方便,还…

CleanMyMac X4.15.0最新官方和谐版下载

Mac系统进行文件清理,一般是直接将文件拖动入“废纸篓”回收站中,然后通过清理回收站,就完成了一次文件清理的操作,但是这么做并无法保证文件被彻底删除了,有些文件通过一些安全恢复手段依旧是可以恢复的,那…

持续集成交付CICD: Sonarqube REST API 查找与新增项目

目录 一、实验 1.SonarQube REST API 查找项目 2.SonarQube REST API 新增项目 一、实验 1.SonarQube REST API 查找项目 (1)Postman测试 转换成cURL代码 (2)Jenkins添加凭证 (3)修改流水线 pipeline…

解决finalshell右键选择粘贴后出现直接执行的问题

文章目录 已经找到问题原因我的问题错误的解决 已经找到问题原因 复制的时候,只复制名字,不要复制后面多出来的东西,不然会自动加上回车换行 我的问题 我当时是想通过 ls -l 查出jdk的文件后, 复制文件名就不用看着敲了&#x…

李宏毅bert记录

一、自监督学习(Self-supervised Learning) 在监督学习中,模型的输入为x,若期望输出是y,则在训练的时候需要给模型的期望输出y以判断其误差——有输入和输出标签才能训练监督学习的模型。 自监督学习在没有标注的训练…

U-boot(八):官方uboot移植

本文主要探讨从ubboot官方移植uboot到x210。 基础 确定设备的配置文件 通过board.cfg中的cpu型号(s5pc1xx)确定设备的配置文件 头文件:include/configs/s5p_goni.h cpu: u-boot-2013.10\arch\arm\cpu\armv7 board: u-boot-2013.10\b…

AI 绘画 | Stable Diffusion 动漫人物真人化

前言 如何让一张动漫人物变成真实系列人物?Stable Diffusion WebUI五步即可实现。快来使用AI绘画打开异世界的大门吧!!! 动漫真人化 首先在图生图里上传一张二次元动漫人物图片,然后选择一个真实系人物画风的大模型,最后点击DeepBooru 反推,自动填充提示词,调整重绘…

CleanMyMac x4.15软件应用程序永久使用

许多刚从Windows系统转向Mac系统怀抱的用户,一开始难免不习惯,因为Mac系统没有像Windows一样的C盘、D盘,分盘分区明显。因此这也带来了一些问题,关于Mac的磁盘的清理问题,怎么进行清理?怎么确保清理的干净&…

系统设计-缓存介绍

该图说明了我们在典型架构中缓存数据的位置。 沿着流程有多个层次。 客户端应用程序:HTTP 响应可以由浏览器缓存。我们第一次通过 HTTP 请求数据,返回时在 HTTP 标头中包含过期策略;我们再次请求数据,客户端应用程序首先尝试从浏…

04 ECharts基础入门

文章目录 一、ECharts介绍1. 简介2. 相关网站3. HTML引入方式4. 基本概念 二、常见图表1. 柱状图2. 折线图3. 饼图4. 雷达图5. 地图 三、应用1. 动画2. 交互 一、ECharts介绍 1. 简介 ECharts是一个使用JavaScript实现的开源可视化库,用于生成各种图表和图形。 EC…

确定TME浸润模式的TMEscore包(胃癌)

步骤学习: 1,基因筛选: 作者使用先前研究得出的 244 肿瘤免疫相关基因(244里有AB两个细分亚集),对特征基因进行缩减。从多个免疫治疗队列中获取这些基因的重要性特征。(TCGA-SKCM、GSE78220、…