springboot——配置及原理

全局配置文件

application.properties、application.yml(以数据为中心)。

用于修改springboot默认配置 。

基本语法  

        1.    以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一层级。

        2.    使用注解@Component @ConfigurationProperties(prefix = “user”)与对象绑定

                使用注解@PropertySource(value={"classpath:person.properties"})关联指定文件

        3.    值的写法

            yml

                字面量:普通的值(数字,字符串,布尔)

                            字符串:默认不用加上,单引号(转义字符)或者双引号(不转义字符);

                对象(属性和值)、Map(键值对);

                            k: v :在下一行来写对象的属性和值得关系,注意缩
                                user:

                                        userName: zhangsan

                                        age: 17

                            行内写法:

                                    user: {userName: zhangsan,age: 17}

                                map: {k1: v1,k2: v2}

                数组(List、Set):

                            pets:

                                   - cat

                                   - dog

                                   - pig

                 行内写法:pets: [cat,dog,pig]

          properties

                user.userName=zhangsan

                user.age=17

                map.k1=v1

                map.k2=k2

                list=a,b,c

                user.dog.name=dog

        4.    随机数:user.age=${random.int}

                              user.userName=zhangsan${random.uuid}

               占位符:user.dog.name=${user.userName}_dog

                              user.dog.name=${user.userName:liuer}_dog  //如果取不出值则使用liuer

        4.    导入 spring-boot-configuration-processor 包 ,添加配置文件提示



注解:

        @ImportResource:导入Spring的配置文件,加在主程序上

        @Configuration:标明配置类,

    

Profile 多环境支持,用于不同环境

1. 多profile文件形式:

           application-dev.properties 、application-dev.properties 



2.yml支持多文档块方式

3.激活指定profile:

    1.配置参数 spring.profies.active=dev


  2.命令行--spring.profiles.active = dev

打包命令行方式

  3. jvm参数-Dspring.profiles.active=dev



配置文件加载优先级





外部配置加载顺序

由高到低,高覆盖低,所有文件形成互补




自动配置原理

参考官方

原理:

总体思路是根据主程序注解加载配置类,配置类使用注解启动属性配置类,属性配置类使用注解与配置文件关联。程序启动时,从属性配置类从配置文件中取值,配置类从属性配置类中取值。

-> @SpringBootApplication   // 主程序注解

->@EnableAutoConfiguration        // 主程序注解自动配置注解

->@AutoConfigurationPackage@Import({AutoConfigurationImportSelector.class}) //利用AutoConfigurationImportSelector.class导入自动配置类

->    AutoConfigurationImportSelector.class 调用 SpringFactoriesLoader.loadFactoryNames()获取META-INF 目录下的spring.factories,spring.factories包含了自动配置类xxx.AutoConfiguration ,自动配置类通过属性配置类xxx.Properties获取配置信息; 

Enumeration<URL> urls =classLoader

!= null ? classLoader.getResources("META-INF/spring.factories") :ClassLoader.getSystemResources("META-INF/spring.factories");

LinkedMultiValueMap result = new LinkedMultiValueMap();

自动配置类



属性配置类

属性配置类通和.properties文件映射,从.properties文件中获取值



@Conditional 注解

查看自动配置启用的组件


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容