**1.设置隐藏相关的文件**
Settings--Editor--File Types
*.mvn;*.gitignore;*.cmd;*mvnw;*.iml;
2.parent :继承spring-boot-starter-parent的依赖管理,控制版本与打包等内容。
dependencies: 项目具体依赖,这里包含了spring-boot-starter-web用于实现HTTP接口(该依赖中包含了Spring MVC),
官网对它的描述是:使用Spring MVC构建Web(包括RESTful)应用程序的入门者,使用Tomcat作为默认嵌入式容器。
spring-boot-starter-test用于编写单元测试的依赖包
build: 构建配置部分。默认使用了spring-boot-maven-plugin,配合spring-boot-starter-parent就可以把Spring Boot应用打包成JAR来直接运行。
3.运行jar包
java -jar "项目打包成jar包的名称"
4.自定义banner
springboot banner: https://www.bootschool.net
把banner.txt放在resources包下。
5.原理探索
自动配置:
pom.xml spring-boot-dependencies: 核心依赖在父工程中。
我们在写或者引入一些springboot依赖的时候,不需要指定版本,因为有这些版本仓库
启动器
org.springframework.boot
spring-boot-starter-web
说白了就是springboot的启动场景。
比如spring-boot-starter-web,就会帮我们自动导入web环境所有的依赖!
springboot会将所有的功能场景,都变成一个个的启动器
我们需要使用什么功能,就只需要找到对应的启动器就可以“starter”。
(https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters)
主程序
@SpringBootApplication : 标注这个类是一个Spring boot的应用:启动类下的所有资源被导入
注解
@SpringBootConfiguration: springboot的配置
@Configuration: spring配置类
@Component: 说明这也是一个Spring组件
@EnableAutoConfiguration: 自动配置
@AutoConfigurationPackage: 自动配置包
@Import(AutoConfigurationPackages.Registrar.class): 自动配置”包注册“
@Import(AutoConfigurationImportSelector.class): 自动配置导入选择
META-INF/spring.factories: 自动配置的核心文件(在spring-boot-autoconfigure包下)
这么多自动配置为什么有的没有生效,需要导入对应的start才能有作用?
核心注解: @ConditionalOnXXX: 如果里面的条件都满足,才会生效。
结论: springboot所有自动配置都是在启动的时候扫描并加载:spring.factories 所有的自动配置类都在这里面,
但是不一定生效,要判断条件是否成立,只有导入了对应的start,就会对应的启动器了,有了启动器,我们自动
装备就会生效,然后就配置成功!
1.springboot在启动的时候,从类路径下 /META-INF/spring.factories 获取指定的值
2.将这些自动配置的类导入容器,自动配置就会生效,帮忙进行自动配置
3.以前我们需要自动配置的东西,现在spring boot帮我们做了
4.整合JavaEE,解决方案和自动配置的东西都在spring-boot-autoconfigure-2.2.0.RELEASE.jar这个包
5.它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器;
6.容器中也会存在非常多的xxxAutoConfiguration的文件,就是这些类给容器中导入了这个场景需要的所有组件
并自动配置。
7.有了自动配置类,免去了我们手动编写配置文件的工作。
6.SpringApplication
推断应用的类型是普通的项目还是Web项目
查找并加载所有可用初始化器,设置到initializers属性中
找出所有的应用程序监听器,设置到listeners属性中
推断并设置main方法的定义类,找到运行的主类
7.配置文件
application.properties 语法结构:key=value
application.yml 语法结构:key:空格 value
8.
org.springframework.boot
spring-boot-configuration-processor
Spring Boot配置注解执行器没有配置”,配置注解执行器的好处是什么。
配置注解执行器配置完成后,当执行类中已经定义了对象和该对象的字段后,
在配置文件中对该类赋值时,便会非常方便的弹出提示信息。
9.@ConfigurationProperties(prefix = "person")
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉spring boot将本类中的所有属性和配置文件中相关的配置进行绑定
参数prefix = ”person“ 将配置文件中的person下面的所有属性一一对应
只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
10.@PropertySource(value = "classpath:jdbc.properties")
@Value("{name}")
绑定自己配置文件的属性的值
使用properties配置文件的时候,可能会发生乱码,需要在idea中设置编码格式为UTF-8
11.yal中还可以使用随机数
dog:
age: 11${random.uuid}
name: ${person.hello:hello}
12.松散绑定:在yml中写的last-name,这个和lastName是一样的,-后面跟着的字母默认是大写的
JSR303配置:可以在字段前增加一层过滤器验证,可以保证数据的合法性
复杂类型封装:yml中可以封装对象,使用@value就不支持
13.JSR303校验
org.springframework.boot
spring-boot-starter-validation
@Validated 开启数据校验
@NotNull(message="不能为空")
@Max(value=120,message="最大为120")
@Email(message="邮箱格式错误")
空检查
@Null 验证对象是否为null
@Notnull 验证对象是否不为null,无法检查长度为0的字符串
@NotBlank 检查约束字符串是不是null,还有被trim的长度是否大于0,只对字符串,且会去掉前后空格
@NotEmpty 检查约束元素是否为null 或者是empty
Boolean检查
@AssertTrue 验证Boolean对象是否为true
@AssertFalse 验证Boolean对象是否为false
长度检查
@Size(min=,max=) 验证对象(Array、Colllection、Map、String)长度是否在给定的范围之内
@Length(min=, max=) 验证字符串的长度是否在给定的范围之内
日期检查
@Past 验证Date 和Calendar对象是否在当前时间之前
@Future 验证Data 和Calendar对象是否在当前时间之后
@Pattern 验证String对象是否符合正则表达式的规则:正则表达式
14.多环境配置及配置文件位置(优先级)
application.yml
file:./config/
file:./
classpath:/config/
classpath:/
15.application.properties
application-dev.properties
application-test.properties
#springboot的多种环境配置:可以选择激活哪一个配置文件
spring.profiles.active=test
16.application.yml
server:
port: 8081
spring:
profiles:
active: dev
---
server:
port: 8082
spring:
profiles: dev
---
server:
port: 8083
spring:
profiles: test
17.spring-boot-autoconfigure:2.6.6
自动装配原理:
1)SpringBoot启动会加载大量的自动配置类
2)我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中
3)我们再来看这个自动配置类中到底配置了哪些组件(只要我们要用的组件存在其中,我们就不需要再手动配置了)
4)给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。
我们只需要在配置文件中指定这些属性的值即可
xxxAutoConfiguration:自动配置类;给容器中添加组件
xxxProperties:封装配置文件中相关属性
18.debug: true
来查看哪些自动配置类生效,哪些没有生效!
Positive matches:自动配置类启用的,正匹配
Negative matches:没有启动,没有匹配成功的自动配置类,负匹配
Unconditional classes:没有条件的类
19.WebMvcAutoConfiguration
classpath:/META-INF/resources/webjars localhost:8080/webjars
classpath:/resources/ localhost:8080
classpath:/static/
classpath:/public/
classpath:/**
20.在templates目录下的所有的页面,只能通过controllerl来跳转
21.图标定制
关闭默认图标 spring.mvc.favicon.enable=false
在resources包下的public中引入 favicon.ico 文件
22.模板引擎
spring boot推荐的是Thymeleaf
prefix="classpath:/templates/"
suffix=".html"
引入头文件:
23.扩展 SpringMvc
@Configuration,实现WebMvcConfigure
SpringBoot在自动配置很多组件的时候,先看容器中有没有用户自己配置的(如果用户自己配置@bean)
如果有就用用户配置的,如果没有就用自动配置的,如果有些组件可以存在多个,比如我们的视图解析器,就将用户配置的
和自己默认的组合起来!
如果我们想扩展使用SpringMVC,我们要做的就是编写一个@Configuration注解类,并且类型为WebMvcConfigurer,
还不能标注@EnableWebMvc注解,我们去自己编写一个
新建一个包叫config,写一个类MyMvcConfig
@EnableWebMvc //导入了一个类,DelegatingWebMvcConfiguration,继承了WebMvcConfigurationSupport 从容器中获取所有的webmvcconfig;
WebMvcAutoConfiguration中@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})只有这个类不存在的时候才生效
在springboot中,有非常多的xxx Configuration 帮助我们进行扩展配置,只要看见这个东西,我们就要注意了!
自定义配置格式化
spring.mvc.data-format=