最简单的springboot项目
springboot的优点与缺点
- 可以创建独立的spring应用
- 内嵌Web服务器
- 自动starter依赖,简化构建配置
- 自动配置spring以及第三方功能
- 提供生产级别的监控、健康检查以及外部化配置
- 无代码生成,无需编写XML
缺点:
1.版本迭代太快,需要时刻关注
2.封装太深、内部原理复杂、不容易吃透
springboot项目的几种配置文件方式
application.properties
application.yaml (源码当中有,但是不常见)
application.yml
bootstrap.yml
springboot配置文件优先级
如果是父子级项目:
父项目根目录下config文件下>父项目根目录下>子目录根目录下config文件>子项目根目录下
顶级最高级是 将项目打包,采用java -jar 命令行方式执行是无脑最高级
springboot属性注入
单个属性注入我们可以采用@value的形式
如果是多属性注入,我们就采用@ConfigurationProperties
@ConfigurationProperties常用于bean属性和配置文件绑定 prefix指定配置文件中某一个节点,该节点的子节点将和属性自动绑定
@ConfigurationProperties该注解要和@component一起使用
在新版本中两种都支持JSR303数据校验
SpEL :SpEL表达式总结_郭振廷的博客-CSDN博客_spel表达式
自动提示功能:在yml配置文件中可以自行跳出对应节点的子节点
JSR303数据校验:Java 规范提案,指被注解的数据必须满足某些条件,否则会报错提示
JSR303介绍和使用_不知所终,不知所起的博客-CSDN博客_jsr303
@propertiessources 该注解用于引入外部资源文件,文件后缀只能使用properties
通过@springbootApplication-->@EnableAutoConfiguration-->@AutoConfigurationPackage
可以找到Registrar的方法
利用这个方法给容器导入一个组件,将指定一个包下的组件批量导入进来,这也就是为什么我们启动类放置的位置会有所要求。
- 利用
getAutoConfigurationEntry(annotationMetadata);
给容器中批量导入一些组件 - 调用
List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)
获取到所有需要导入到容器中的配置类 - 利用工厂加载
Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader);
得到所有的组件 - 从META-INF/spring.factories位置来加载一个文件。
默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件
spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories
其实就是在配置文件中写死了,springboot一启动就要加载的所有配置类
springboot按照条件装配规则
虽然我们127个场景的所有自动配置启动的时候默认全部加载,但是xxxxAutoConfiguration
按照条件装配规则(@Conditional
),最终会按需配置。
还会有一个HttpEndcodingAutoconfigration的自动配置,页面上不会出现乱码的形式
总结:
SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration
每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。
(xxxxProperties里面读取,xxxProperties和配置文件进行了绑定)
生效的配置类就会给容器中装配很多组件
只要容器中有这些组件,相当于这些功能就有了
定制化配置:
用户直接自己@Bean替换底层的组件
用户去看这个组件是获取的配置文件什么值就去修改。
xxxxxAutoConfiguration —> 组件 —> xxxxProperties里面拿值 ----> application.properties
一初始导入很多自动配置类,按需加载所有的组件,组件从Properties里面拿值