一、springBoot
约定大于配置,简化开发。衍生出一站式解决方案。
主要优点:
- 为spring开发者更快入门
- 开箱即用,提供各种默认配置来简化项目配置
- 内嵌式容器简化web
- 没有冗余代码生成和xml配置
在resources下新建banner.txt 文件 可以更改 spring启动图形。
二、自动配置
2.1 pom.xml
spring-boot-dependencies 核心依赖在父工程中
我们在写或者引入一些springboot依赖的时候不需要引用版本,因为有这些版本仓库。
2.2 启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
springboot启动场景
springboot会将所有的功能场景都变成一个个的启动器。
在使用某个功能时,只需要找到对应的启动器。
2.3 主程序
注解:
@SpringBootApplication 标注这个类是一个springboot的应用
@SpringBootConfiguration springboot的配置
@Configuration spring配置类
@Component 说明是spring的一个组件
@EnableAutoConfiguration 自动配置
@Import({AutoConfigurationImportSelector.class}) 自动导入选择器
@AutoConfigurationPackage 自动配置包
@Import({Registrar.class}) 导入了选择器
List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes); 获取所有的配置
获取候选的配置
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
return configurations;
}
META-INF/spring.factories 自动配置的核心文件
Properties properties = PropertiesLoaderUtils.loadProperties(resource);
所有的资源都加载在配置类中
结论:spring所有的自动配置都是在启动的时候扫描并加载,spring.factories 所有的自动配置类都在这里,但是不一定生效,需要判断条件是否成立,只要导入了对应的start,就有对应的启动器,我们自动装配就会生效,然后配置成功。
1、springboot在启动时从类路径下加载 META-INF/spring.factories 获取指定的值
2、将这些自动配置类导入容器,自动配置生效
3、以前我们需要自动配置的东西,现在springboot帮我们做了
4、整合javaEE,解决方案和自动配置的东西都在spring-boot-autoconfigure-2.6.1.jar包下
5、它会把所有需要导入的组件,以类名的方式返回,这些组件就会添加到容器。
6、容器中会存在非常多的xxxAutoConfiguration的文件(@Bean),就是这些类给容器中导入了这个场景需要的所有组件,@Configuration、JavaConfig
7、有了自动配置类,免去了我们手动编写配置文件的工作。
2.3.1 Run方法
1、判断应用类型是普通项目还是web项目
2、查找并加载所有可用的初始化器,设置到Initializers属性中
3、找出所有的应用程序监听器,设置到Listeners属性中
4、推断并设置main方法的定义类,找出运行的主类。
2.3.2 自动装配原理
1、springboot启动会加载大量的自动配置类
2、看我们需要的功能有没有在springboot默认写好的自动配置类中
3、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在其中,我们就不需要在手动配置了)
4、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性,我们只需要在配置文件中指定这些属性的值即可。
xxxAutoConfigurartion: 自动配置类;给容器中添加组件;
xxxProperties:封装配置文件中相关属性;
三、springboot配置
配置对象的值
@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
@ConfigurationProperties(prefix = "articleinfo") //注意支持使用驼峰规则
public class ArticleInfo {
private String articleId;
private String imageUrl;
}
articleInfo:
articleId: CO1233
imageUrl: test
可导入 也可以不导入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
四、JSR303校验
使用注解:
@Validated
校验源码所在地
五、多环境及配置文件位置
server:
port: 8080
spring:
profiles:
active: dev #激活dev环境
---
server:
port: 8081
spring:
profiles: dev
---
server:
port: 8082
spring:
profiles: test