SpringBoot 属性配置解析

2023-12-13 10:01:18

属性配置介绍

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处理逻辑?

文章来源:https://blog.csdn.net/Box_clf/article/details/134843922
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。