Spring Boot的配置文件和自动配置原理
使用Spring Initializer快速创建Spring Boot项目
1.首先用SpringInitializer快速创建一个父项目maven,然后在父项目里面创建一个子项目。
2.由于是子项目继承的是父项目,因此要在子项目里面的pom里面修改parent属性。
spring_initializer ----> spring_parent ---->spring-boot-starter-parent
修改后:
遇到的问题:
解决办法:想要继承springboot的父项目,需要用springboot的group。
遇到问题:
解决办法:把父工程的打包方式改成pom <packaging>pom</packaging>
意味着它不是一个具体的项目,只是为了继承
3.子工程的目录
HelloControler:
@RestController @RequestMapping("/hello") public class HelloControler { //处理映射 @RequestMapping("/ini") //映射处理方法 public String sayHi(){ return "Hello SpringBoot"; } }
遇到问题:springboot版本与jdk版本不匹配的问题
解决办法:降低parent里面springboot的版本设置为2.3.5.RELEASE
运行结果
自定义SpringApplication (了解)
SpringApplication调用静态run()方法来启动spring的应用,还可以调用实例的其他方法来完成springboot的其他功能,例如添加监听器等。
创建一个本地实例并对其进行自定义,使其实例化
例如关闭横幅
配置文件的使用
在springboot里面约定大于配置,因此配置文件是有固定格式的。
3.1配置文件的介绍
-
在SpringBoot里面使用一个全局配置文件 核心配置文件,配置文件名在约定的情况下名字是固定的。
-
配置文件的作用:修改springboot自动配置的默认值;springboot在底层都给我们自动配置好的;
3.2两种常用配置文件的格式
-
application.properties的用法:扁平的k/v格式
-
-
applicayion.yml:树形结构
可读性和约束性更强
3.3配置文件的加载顺序
每个springboot版本不同,其优先级也是不同的。
如果这三个配置里面都有相同的配置,按读取优先级来进行读取,如果是三个配置中只有一个,则互补配置。
补充:spring-boot-starter-parent 是父springboot项目中的父maven项目;
spring-boot-starter-parent是继承spring-boot-dependencies;
spring-boot-denpendencies是版本仲裁库,维护了springboot中所有的自动配置的第三方库的所有的版本的版本号。
遇到问题:启动不了springboot
解决办法:yml和yaml的配置文件格式不对导致的。把yml和yaml更改为正确的配置格式
其他约定配置文件加载顺序
外部约定配置文件加载的顺序(由低到高)
resource文件里面内容编译后进入到class里面的根目录,因此,classpath根目录=resource的根目录
-
.classpath根目录下的
-
classpath根目录下面的config
-
项目根目录:如果当前项目是继承/耦合关系Maven项目,项目根目录=父maven项目根目录(不常用)
-
项目根目录/config(不常用)
-
直接子目录/config
总结:
一般来说,我们通常使用1,2,5。当有config时,config里面的优先,然后再看config里面同级的,也遵循互补原则。
profile配置文件的加载顺序
Profile的意思是配置,对于应用程序来说,不同的环境需要不同的配置。
SpringBoot框架提供了多profile的管理功能,我们可以使用profile功能来区分不同环境的配置。
1.多file文件
官方给出的语法规则:application-xxx.properties/yaml/yml
开发环境时开发环境的配置
生产环境时生产环境的配置。
2.激活profile
在application.properties加入以下内容
spring.profiles.active=dev
先按照位置来读取优先级,在同一位置下profile优先级最高,如果没有指定profil,先yml--yaml--propertices