• 随笔记录-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配置过程


  • 相关阅读:
    SpreadJS 15.1 CN 与 SpreadJS 15.1 EN
    使用mac自带VNC公网远程控制macOS
    Docker基础-cgroup
    Git常用命令
    打码半年,开源一款自定义大屏设计软件!
    Python使用Redis计算经纬度距离
    【探索AI】二十五 深度学习之第8周:深度学习项目实战
    浅谈智慧水务在供水厂企业中的应用发展-Susie 周
    AIGC下一步:如何用AI再度重构或优化媒体处理?
    文本挖掘入门
  • 原文地址:https://blog.csdn.net/XIYECODE/article/details/134262332