Spring Boot 配置文件

一:配置


默认文件

修改配置


效果图

配置文件的作用:修改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>

yml配置
效果图

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


效果图

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


效果图

另外还有两个导入配置的注解:

       @PropertySource:加载指定的配置文件里的配置;

        @ImportSource : 导入spring的配置文件使spring的配置文件生效;


激活指定的profiles

效果图



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方法

1

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

2

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

this.getBeanClassLoader()获取加载器

3

通过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:封装配置文件中相关属性;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容