【SpringBoot】最新版2019Spring Boot配置解析,源码解析(速成SpringBoot)——学习笔记版【2】
SpringBoot配置文件
文章目录
- SpringBoot配置文件
- 四、配置文件
- 1.简介
- 2.YAML用法
- 2.1 简介
- 2.2语法
- 3.为属性注入值
- 3.1使用.yml配置文件
- 3.1编写.yml文件
- 3.2也可以编写properties文件
- 3.3使用@Value为属性注入值
- 4.多环境配置(开发/测试/生产)
- 4.1创建多个properties文件
- 4.2 定义文档块
- 5.加载外部的配置文件
- 5.1 加载properties属性文件
- 5.2 加载spring配置文件
- 5.3使用注解方式添加组件
- 五、自动配置的原理
- 1.执行流程
- 2.原理分析
- 3.总结
- PS:需要完整版笔记,请评论留下邮箱,我看到后回发给你PDF完整版记录~~~
- 点击查看分版笔记目录:
四、配置文件
1.简介
默认:
- application.properties
- application.yml
ps:文件名固定,放在classpath:/或classpath:/config目录下
2.YAML用法
2.1 简介
YAML不是一种标记语言;
YAML是专门用来写配置文件的语言,比xml、properties更适合作为配置文件;
YAML文件的后缀是.yml或.yaml 。
2.2语法
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tag键,只允许使用空格
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- “#” 表示注释
三种数据结构的用法
1.字面量:普通的值,字符串、数字、布尔等
number: 12.5str: helloname: 'tom cruise' #如果字符串包含空格或者特殊字符,则必须使用引号引起来,单引号或双引号都可以name: 'tom \n cruise' #单引号不会对特殊字符进行转义,结果:tom 换行 cruisename: "tom \n cruise" #对特殊字符进行转义,会作为普通字符输出
2.对象,也称为Map映射,包含属性和值
#写法1:换行写,使用缩进
user:name: tomage: 21
# 写法2:行内写法
user: {name: tom,age: 21}
3.数组,如List、Set等
# 写法1:换行写,使用短横线
names:- tom- jack- alice
# 写法2:行内写法
names: [tom,jack,alice]
3.为属性注入值
通过添加新配置文件,为类中的属性注入值
3.1使用.yml配置文件
添加依赖(可选)
<!-- 配置文件处理器,自动生成元数据信息,编写配置文件就有提示信息-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>
3.1编写.yml文件
#修改默认配置
server:port: 8088 #写法key:value,冒号后面必须有空格servlet:context-path: /springboot03user:username: adminage: 18status: truebirthday: 2019/2/15address:province: 安徽省city: 合肥市lists:- list1- list2- list3maps: {k1: v1,k2: v2}
3.2也可以编写properties文件
(使用这个之前需要设置idea的编码,防止中文乱码)
#server.port=8083
#server.servlet.context-path=/cz
user.username=alice
user.age=21
user.status=false
user.birthday=2019/1/15
user.address.province=安徽省
user.address.city=合肥市
user.lists=list1,list2,list2
user.maps.k1=v1
user.maps.k2=v2
文件目录:
3.3使用@Value为属性注入值
@Value和@ConfigurationProperties的比较:
- @Value只能一个个为属性注入值,而@ConfigurationProperties可以批量为属性注入值
- @Value不支持复杂类型封装,而@ConfigurationProperties支持
4.多环境配置(开发/测试/生产)
两种方式:
1.创建多个properties文件
2.定义yml文档块
4.1创建多个properties文件
步骤:
1. 创建不同环境的properties文件
文件命名要必须符合application-xxx.properties格式
可以在其内部配置不同的端口测试。
2. 在application.properties文件中指定要激活的配置
4.2 定义文档块
---
spring:profiles: dev
server:port: 9991
---
spring:profiles: test
server:port: 9992
---
spring:profiles: prod
server:port: 9993
在第一个文档块中指定要激活的配置 :
5.加载外部的配置文件
5.1 加载properties属性文件
使用@PropertySource加载外部的属性文件
// 将当前Bean添加到容器中
@Component
// 加载外部的属性文件
@PropertySource({"classpath:user.properties"})
// 默认读取全局配置文件获取值,将当前类中的属性与配置文件中的user进行绑定
@ConfigurationProperties(prefix = "user")
public class User implements Serializable {
5.2 加载spring配置文件
使用@ImportResoruce加载外部的Spring的XML文件
ps:除非必要,否则不建议写xml文件
// 加载外部的spring配置文件
@ImportResource({"classpath:spring.xml"})
@SpringBootApplication
public class Springboot03ConfigApplication {
5.3使用注解方式添加组件
使用@Configuration和@Bean
//标注在类上,表示这是一个配置类,相当于以前编写的Spring配置文件
@Configuration
public class SpringConfig {//标注在方法上,向容器中添加一个组件,将方法的返回值添加到容器中@Beanpublic Address address(){Address address=new Address();address.setProvince("安徽");address.setCity("合肥");return address;}
}
五、自动配置的原理
1.执行流程
SpringBoot应用启动时会加载主程序类,开启了自动配置功能@EnableAutoConfiguration
@EnableAutoConfiguration作用
利用@Import({AutoConfigurationImportSelector.class})向容器中添加一些组件(自动配置类)。
【查看AutoConfigurationImportSelector中的selectImports()方法;---->查看List configurations = this.getCandidateConfigurations(annotationMetadata, attributes)获取候选的配置;---->查看SpringFactoriesLoader.loadFactoryNames方法---->查看loadSpringFactories()方法---->查看classLoader.getResources(“META-INF/spring.factories”)加载META-INF/spring.factories】
- 简单来说就是:
扫描所有jar包类路径下的METAINF/spring.factories文件,获取到EnableAutoConfiguration对应的值(在spring-boot-autoconfigure-2.1.2.RELEASE.jar中),将这些自动配置类(xxxxAutoConfiguration)添加容器中
- 简单来说就是:
通过这些自动配置类完成相应的配置功能
2.原理分析
以HttpEncodingAutoConfiguration 为例,即原先在web.xml文件中配置的CharacterEncodingFilter过滤器
// 表示这是一个配置类,相当于原先编写的spring配置文件
@Configuration
// 启用HttpProperties类的ConfigurationProperties功能,通过配置文件为其属性注入值,并将其添加到容器中
@EnableConfigurationProperties({HttpProperties.class})
// 如果当前应用是Web应用,则该配置类生效,否则不生效
@ConditionalOnWebApplication(type = Type.SERVLET
)
// 如果当前应用中有CharacterEncodingFilter类,则该配置类生效,否则不生效
@ConditionalOnClass({CharacterEncodingFilter.class})
// 如果配置文件中有spring.http.encoding.enabled选项,则该配置项生效,否则不生效,默认已经设置为True,所以默认生效
@ConditionalOnProperty(prefix = "spring.http.encoding",value = {"enabled"},matchIfMissing = true
)
public class HttpEncodingAutoConfiguration {private final Encoding properties;// 将容器中HttpEncodingProperties注入public HttpEncodingAutoConfiguration(HttpProperties properties) {this.properties = properties.getEncoding();} // 将方法返回值添加到容器中@Bean// 如果容器中没有这个组件,则添加@ConditionalOnMissingBeanpublic CharacterEncodingFilter characterEncodingFilter() {CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();filter.setEncoding(this.properties.getCharset().name());filter.setForceRequestEncoding(this.properties.shouldForce(org.springframework.boot.autoconfigure.http.HttpProperties.Encoding.Type.REQUEST));filter.setForceResponseEncoding(this.properties.shouldForce(org.springframework.boot.autoconfigure.http.HttpProperties.Encoding.Type.RESPONSE));return filter;}
#可以在yml文件中通过配置绑定某个类的属性值:
spring.http.encoding.charset=gbk
spring.http.encoding.force=true
注意:
- 根据当前不同的条件判断,决定自动配置类是否生产,即并不是所有的自动配置类都会生效
- 自动配置类xxxAutoConfiguration的属性是从对应的xxxProperties类中获取的
- xxxProperties类中的所有属性是通过配置文件注入绑定的,我们可以通过配置文件指定这些属性的值
3.总结
- SpringBoot启动时会加载大量的自动配置类(xxxAutoConfiguration)
- 通过这些自动配置类向容器中添加组件
- 通过这些组件来实现自动配置功能,简化
PS:需要完整版笔记,请评论留下邮箱,我看到后回发给你PDF完整版记录~~~
点击查看分版笔记目录:
【SpringBoot】最新版2019Spring Boot快速入门(速成SpringBoot)——学习笔记版解析【1】
【SpringBoot】最新版2019Spring Boot配置解析,源码解析(速成SpringBoot)——学习笔记版【2】
【SpringBoot】最新版2019Spring Boot之WEB开发——Thymeleaf模板引擎速成(速成SpringBoot)——学习笔记版解析【3】
【SpringBoot】最新版2019Spring Boot之MVC功能,异常处理,servlet容器(速成SpringBoot)——学习笔记版解析【4】
【SpringBoot】最新版2019Spring Boot之连接数据库——JDBC,MyBATIS,分页,MyBatisPlus(速成SpringBoot)——学习笔记版解析【5】
【SpringBoot】最新版2019Spring Boot配置解析,源码解析(速成SpringBoot)——学习笔记版【2】相关推荐
- Qt源码解析-源码解析-QVideoWidget播放手机视频旋转问题
Qt源码解析 索引 Qt源码解析-源码解析-QVideoWidget播放手机视频旋转问题 问题描述与复现 使用手机拍摄的视频是竖屏的,上传后,使用QVideoWidget播放,变成横屏. 总结,可以让 ...
- 嵌入式之uboot源码分析-启动第二阶段学习笔记(下篇)
接上部分---->嵌入式之uboot源码分析-启动第二阶段学习笔记(上篇) 注:如下内容来自朱老师物联网大讲堂uboot课件 3.2.14 CFG_NO_FLASH (1)虽然NandFlash ...
- Mybatis 源码解析 -- 基于配置的源码解析(二)
为什么80%的码农都做不了架构师?>>> mapper解析 接着上篇的配置,本篇主要讲解mappers标签 <?xml version="1.0" e ...
- FastJson PropertyNamingStrategy 转换成JSON字符串的四种格式配置及源码解析
FastJson在将bean转成JSON字符串时, 默认使用CamelCase(驼峰命名)的配置; 在1.2.15版本之后,FastJson支持配置PropertyNamingStrategy,有四种 ...
- 【Spring Boot实战】源码解析Spring Boot自动配置原理
一.简介 Spring致力于让Java开发更简单,SpringBoot致力于让使用Spring进行Java开发更简单,SpringCloud致力于基于SpringBoot构建微服务生态圈,让微服务开发 ...
- 你只知道@Value?设置server.port就能定义端口号是如何实现的?springboot读取配置文件的多种方式以及源码解析
你只知道@Value?设置server.port就能定义端口号是如何实现的?springboot读取配置文件的多种方式以及原理解析 一.SpringBoot全局配置文件优先级 二.属性注入常用注解 1 ...
- java B2B2C Springboot多租户电子商城系统-Eureka源码解析...
Eureka的限流算法类RateLimiter是基于令牌桶算法来实现的,下面看一看令牌桶算法的原理: 需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零 ...
- XyplayerX4.0 影视解析源码+解析接口+安装步骤
简介 XyPlayer 智能解析,是用PHP开发的一款拥有强大的后台管理.一次解析.资源站对接.线路切换.剧集列表.自动播放下集等功能的智能二次解析网站源码!资源来自网络.带多条无广告线路,智能屏蔽手 ...
- 跟踪源码运行流程---SpringMVC学习笔记(四)
通过前端控制器源码分析springmvc的执行过程 第一步:前端控制器接收请求 调用doDiapatch 第二步:前端控制器调用处理器映射器查找 Handler 第三步:调用处理器适配器执行Handl ...
最新文章
- 使用HTML5开发离线应用 - cache manifest
- Linux内核Socket参数调优
- 在HTML5中,用getCurrentPosition()获取用户的当前位置
- Win10微软帐户切换不回Administrator本地帐户的解决方法【亲测】
- word计算机基础知识试题及答案,计算机基础知识试题及答案(一)
- rp文件,怎么用浏览器预览
- java代理模式的应用场景
- ArcGis——raster calculator
- 常见阿拉伯数学符号以及拼写
- CF1219G Harvester 题解
- XShell免费版的安装配置教程以及使用教程
- 益聚星荣:今年双11,薇娅失去了“全网最低价”?
- Tesla技术方案深度剖析:自动标注/感知定位/决策规划/场景重建/场景仿真/数据引擎...
- 小程序Git问题:ERROR: credentials callback returned an invalid cred type解决方法
- 数学模型奶制品生产c语言编程,数学模型 奶制品的生产与销售.ppt
- 戴尔服务器怎么安装win7系统,展示戴尔电脑如何重装win7
- 在图片上添加文字和图片
- 企业为什么要用知识管理系统?
- 中国电信开发者星球c语言题库,中国电信笔试真题
- Delphi易主Embarcadero
热门文章
- Python--如何计算皮尔逊相关系数(Pearson correlation coefficient)
- 基于关联规则与可平面图的商品摆放规划-----实验报告
- 安装scrapy报错failed with error code 1 in C:\Users\ADMINI~\AppData\Local\Temp\pip-install-4447ozxq\Twist
- 切换cuda版本之后/usr/local/cuda/lib64找不到的问题
- swiper + vue 中间大两边小轮播图
- 总结在使用vue-photo-preview---图片查看大图插件,点击图片无法显示预览等问题
- 一分钟煮鸡蛋好吃又有营养 - 生活至上,美容至尚!
- 涛思数据TDengine启动报错,提示localEp is different from localhost.localdomain:6030
- 【软件工程系列】软件项目管理
- RocketMQ学习笔记(持续更新)