一:配置

修改配置

配置文件的作用:修改Spring Boot 自动配置的默认值;Spring Boot在底层都给我们配置好了;
YAML :是一个标记语言;
标记语言:
以前的配置文件,大多数都使用的是XXXX.xml文件形式;
YAML:以数据为中心,比json,xml 等更适合做配置文件;
这里试了下application.propetries与applicaiton.yml的优先级:结果显示同时存在时优先读properties文件;

YAML语法:

编写配置文件导入spring-boot-configuration-processor:作用:动态获取配置文件值,编写时给出提示;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>


需要批量指定时使用@ConfigurationProperties(prefix ="person") 其中person是批量的对象名

需要单个值使用@Value("${name}") 其中name 是配置中的键

另外还有两个导入配置的注解:
@PropertySource:加载指定的配置文件里的配置;
@ImportSource : 导入spring的配置文件使spring的配置文件生效;
激活指定的profiles


命令行激活:
可以在传入参数


去除上图配置,如下这种也可以指定通过profiles指定

jvm指定配置文件:


配置同时存在时


说明命令行优先级>jvm优先级
外部配置加载顺序:
Spring Boot加载配置:优先级从高到低,高优先级的配置覆盖低优先级的配置,u所有的配置会形成互补配置

#设置项目访问地址--.servlet新版本配置
server.servlet.context-path=/boot01
命令行参数:多个配置使用空格分开--开头


当.properties中配置server.servlet.context-path=/boot02,,命令行启动使用/boot01是会是什么效果呢? 拭目以待~
答案是命令行配置优先级大于.properties中的配置优先级

自动配置原理
配置文件到底能写什么? 怎么写? 自动配置原理:
自动配置原理:
1). Spring Boot启动的时候加载主配置类,通过@EnableAutoConfiguration子注解开启自动配置功能
2). EnableAutoConfiguration作用:
2.1).通过spring源注解@Import({AutoConfigurationImportSelector.class}) 导入AutoConfigurationImportSelector为容器加载组件; 那是怎么做到的呢?
1.利用selectImports方法

2.通过List configurations =this.getCandidateConfigurations(annotationMetadata, attributes);获取候选配置

3.SpringFactoriesLoader.loadFactoryNames 中的this.getSpringFactoriesLoaderFactoryClass()方法获取EnableAutoConfiguration.class
this.getBeanClassLoader()获取加载器

通过loadFactoryNames 中的loadSpringFactories() 得到预选配置的路径META-INF下的spring.factories,之后会扫描jar包下META-INF下的spring.factories ,然后通过传进来的加载器咔咔加载预选配置到spring容器

把扫描到的这些文件内容包装成properties对象,然后从properties中获取到EnableAutoConfiguration.class类对应得值,然后把他们加载到容器中

将类路径下META-INF/spring.factories里面的配置的所有EnableAutoConfiguration的值加入到容器中;
每一个这样的xxxAutoConfiguration类都是容器中的组件,都加入到容器中;用他们来做自动化配置;
以其中一个配置类为例解释自动配置原理:

精髓:
1). Spring Boot 启动会加载大量的自动配置类
2). 我们看我们需要的功能有没有Spring Boot 默认写好的自动配置类
3). 我们再来看这个自动配置类中到底配置里那些组件;(只有我们要用的组件有,我们就不想需要再来配置了)
4). 给容器中自动配置类添加组件的时候,会从properties类中获取厚些属性。我们就可以在配置文件中指定这些属性的值
xxxxAutoConfiguration:自动配置类,给容器加载组件
xxxxProperties:封装配置文件中相关属性;