• 随笔记录-springboot_ConfigFileApplicationListener


    SimpleApplicationEventMulticasterBootstrapApplicationListenerConfigFileApplicationListener

    加载流程

    SpringApplication#run(java.lang.Class[], java.lang.String[])
    SpringApplication#run(java.lang.String…)
    SpringApplication#prepareEnvironment
    org.springframework.boot.SpringApplicationRunListeners#environmentPrepared
    org.springframework.boot.context.event.EventPublishingRunListener#environmentPrepared
    SimpleApplicationEventMulticaster#multicastEvent(ApplicationEvent, ResolvableType)
    SimpleApplicationEventMulticaster#doInvokeListener
    调用BootstrapApplicationListener#onApplicationEvent方法
    getApplicationListeners
    getApplicationListeners
    BootstrapApplicationListener#onApplicationEvent
    在这里插入图片描述
    BootstrapApplicationListener#bootstrapServiceContext
    加载bootstrap配置
    加载bootstrap配置

    添加一个名为bootstraporg.springframework.core.env.MapPropertySourceorg.springframework.core.env.MutablePropertySources,其中配置了spring.config.namebootstrap
    中间执行下文逻辑
    方法最后又会移除bootstraporg.springframework.core.env.MapPropertySource

    org.springframework.boot.builder.SpringApplicationBuilder#run

    this.build().run(args) 复用 SpringApplication#run 方法
    SpringApplication#run(java.lang.String…)
    SpringApplication#prepareEnvironment
    org.springframework.boot.SpringApplicationRunListeners#environmentPrepared
    org.springframework.boot.context.event.EventPublishingRunListener#environmentPrepared
    SimpleApplicationEventMulticaster#multicastEvent(ApplicationEvent, ResolvableType)
    SimpleApplicationEventMulticaster#doInvokeListener

    执行ConfigFileApplicationListener
    ConfigFileApplicationListener#onApplicationEvent
    ConfigFileApplicationListener#onApplicationEnvironmentPreparedEvent
    ConfigFileApplicationListener#postProcessEnvironment
    ConfigFileApplicationListener#addPropertySources
    ConfigFileApplicationListener.Loader#load()

    加载一些列配置文件

    ConfigFileApplicationListener.Loader#load(ConfigFileApplicationListener.Profile, ConfigFileApplicationListener.DocumentFilterFactory, ConfigFileApplicationListener.DocumentConsumer)
    加载配置文件

    1. 获取各种路径

    通过 ConfigFileApplicationListener.Loader#getSearchLocations() 源码:
    获取spring.config.additional-location配置的路径。若spring.config.location存在,再将其配置的路径加入;否则加入classpath:/,classpath:/config/,file:./,file:./config/*/,file:./config/这些默认路径。
    获取路径

    1. 获取各种配置文件名称

    通过 ConfigFileApplicationListener.Loader#getSearchNames() 源码:
    spring.config.name存在,获取其配置的内容作为名称列表;否则就获取 ConfigFileApplicationListener.this.names 和 application作为名称列表。
    获取配置文件名称

    备注:

    • spring.config.nameBootstrapApplicationListener#bootstrapServiceContext 中就设置为bootstrap
    • BootstrapApplicationListener#bootstrapServiceContext 执行之后,移除了bootstrap,此时环境变量就不存在spring.config.name(前提是没有手动配置过),所以拿到的文件名称就是默认的application
      获取默认配置文件名称
    1. 加载单一路径单一文件配置

      ConfigFileApplicationListener.Loader#load(java.lang.String, java.lang.String, ConfigFileApplicationListener.Profile, ConfigFileApplicationListener.DocumentFilterFactory, ConfigFileApplicationListener.DocumentConsumer)
      在这里插入图片描述

    加载bootstrap配置大致流程
    加载bootstrap配置过程


  • 相关阅读:
    vscode java 报错一例
    如何保障UDP传输中数据文件不丢失?
    Ianvs: 一个高效的AI测试工具
    2024.4.19作业
    git clone和git init git pull 的一点问题
    js 正则匹配连续的字符,一般用于密码输入框(禁止输入连续的字母或者数字等)
    lua协程
    【小记】二八十十六,进制团团转
    剑指offer 丑数(dp、指针)
    第十七章 条件随机场
  • 原文地址:https://blog.csdn.net/XIYECODE/article/details/134262332