zoukankan      html  css  js  c++  java
  • springBoot 配置文件的优先级

    SpringBoot

    原理初探

    自动配置:

    pom.xml

    • spring-boot-dependencies: 核心依赖在父工程中!
    • 我们在写或者引入一些springboot依赖的时候,不需要指定版本,就因为有这些版本仓库.

    启动器

    • <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      
    • 启动器:说白了就是springboot的启动场景

    • 比如spring-boot-starter-web,他就会帮我们自动导入web环境所有的依赖!

    • springboot会将所有的功能场景,都变成一个个的启动器

    • 我们要使用什么功能只需要找对应的启动器starter

    主程序

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

    注解:

    @SpringBootConfiguration :springboot的配置
        @Configuration: spring配置类
        	@Component: 说明这也是一个spring的组件
    
    @EnableAutoConfiguration: 自动配置
        @AutoConfigurationPackage :自动配置包
            @Import(AutoConfigurationPackages.Registrar.class) 自动配置 自注册
        @Import(AutoConfigurationImportSelector.class)
    

    springboot所有的自动配置都是在启动的时候扫描并加载:spring.factories所有的自动配置类都在这里,但是不一定生效,判断条件是否成立,只要导入了对应的satart,就有对应的容器,有了启动器,自动装配就会生效,配置成功

    SpringApplication.run();

    主要分为两部分,一部分是springApplication的实例化,而是run方法的执行;

    • SpringApplication
      1. 推断应用 的类型是普通的项目还是web项目
      2. 查找并加载所有可用初始化器,设置到initializers属性中
      3. 找出所有的应用程序监听器,设置到listeners属性中
      4. 推断并设置main方法的定义类,找到运行的主类
    //	SpringApplication构造器
    public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
    		this.resourceLoader = resourceLoader;
    		Assert.notNull(primarySources, "PrimarySources must not be null");
    		this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
    		this.webApplicationType = WebApplicationType.deduceFromClasspath();
    		this.bootstrappers = new ArrayList<>(getSpringFactoriesInstances(Bootstrapper.class));
    		setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
    		setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
    		this.mainApplicationClass = deduceMainApplicationClass();
    	}
    ```总结:
    
    1. springboot启动会加载大量的自动配置类
    2. 我们看我们需要的功能有没有在springboot默认写好的自动配置类中;
    3. 自动配置中配置的组件中只要有我们需要的,我们就不需要再手动配置了
    4. 给容器中自动配置类添加组件的时候,会从properties类中获取某些属性.我们只需要在配置文件中指定这些属性的值即可;
    
    xxxAutoConfiguration:自动配置类;给容器添加组件
    
    xxxProperties:封装配置文件中相关的属性
    
    
    
    ## springBoot配置位置优先级
    
    ```text
    1.file:./config/
    2.file:./
    3.classpath:/config/
    4.classpath:/
    

    静态资源默认的映射路径有

    //WebProperties
    private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/","classpath:/resources/", "classpath:/static/", "classpath:/public/" };
  • 相关阅读:
    修复PLSQL Developer 与 Office 2010的集成导出Excel 功能
    Using svn in CLI with Batch
    mysql 备份数据库 mysqldump
    Red Hat 5.8 CentOS 6.5 共用 输入法
    HP 4411s Install Red Hat Enterprise Linux 5.8) Wireless Driver
    变更RHEL(Red Hat Enterprise Linux 5.8)更新源使之自动更新
    RedHat 5.6 问题简记
    Weblogic 9.2和10.3 改密码 一站完成
    ExtJS Tab里放Grid高度自适应问题,官方Perfect方案。
    文件和目录之utime函数
  • 原文地址:https://www.cnblogs.com/HHbJ/p/14689505.html
Copyright © 2011-2022 走看看