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包类路径下的META­INF/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,分页,MyBatis­Plus(速成SpringBoot)——学习笔记版解析【5】

【SpringBoot】最新版2019Spring Boot配置解析,源码解析(速成SpringBoot)——学习笔记版【2】相关推荐

  1. Qt源码解析-源码解析-QVideoWidget播放手机视频旋转问题

    Qt源码解析 索引 Qt源码解析-源码解析-QVideoWidget播放手机视频旋转问题 问题描述与复现 使用手机拍摄的视频是竖屏的,上传后,使用QVideoWidget播放,变成横屏. 总结,可以让 ...

  2. 嵌入式之uboot源码分析-启动第二阶段学习笔记(下篇)

    接上部分---->嵌入式之uboot源码分析-启动第二阶段学习笔记(上篇) 注:如下内容来自朱老师物联网大讲堂uboot课件 3.2.14 CFG_NO_FLASH (1)虽然NandFlash ...

  3. Mybatis 源码解析 -- 基于配置的源码解析(二)

    为什么80%的码农都做不了架构师?>>>    mapper解析 接着上篇的配置,本篇主要讲解mappers标签 <?xml version="1.0" e ...

  4. FastJson PropertyNamingStrategy 转换成JSON字符串的四种格式配置及源码解析

    FastJson在将bean转成JSON字符串时, 默认使用CamelCase(驼峰命名)的配置; 在1.2.15版本之后,FastJson支持配置PropertyNamingStrategy,有四种 ...

  5. 【Spring Boot实战】源码解析Spring Boot自动配置原理

    一.简介 Spring致力于让Java开发更简单,SpringBoot致力于让使用Spring进行Java开发更简单,SpringCloud致力于基于SpringBoot构建微服务生态圈,让微服务开发 ...

  6. 你只知道@Value?设置server.port就能定义端口号是如何实现的?springboot读取配置文件的多种方式以及源码解析

    你只知道@Value?设置server.port就能定义端口号是如何实现的?springboot读取配置文件的多种方式以及原理解析 一.SpringBoot全局配置文件优先级 二.属性注入常用注解 1 ...

  7. java B2B2C Springboot多租户电子商城系统-Eureka源码解析...

    Eureka的限流算法类RateLimiter是基于令牌桶算法来实现的,下面看一看令牌桶算法的原理: 需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零 ...

  8. XyplayerX4.0 影视解析源码+解析接口+安装步骤

    简介 XyPlayer 智能解析,是用PHP开发的一款拥有强大的后台管理.一次解析.资源站对接.线路切换.剧集列表.自动播放下集等功能的智能二次解析网站源码!资源来自网络.带多条无广告线路,智能屏蔽手 ...

  9. 跟踪源码运行流程---SpringMVC学习笔记(四)

    通过前端控制器源码分析springmvc的执行过程 第一步:前端控制器接收请求 调用doDiapatch 第二步:前端控制器调用处理器映射器查找 Handler 第三步:调用处理器适配器执行Handl ...

最新文章

  1. 使用HTML5开发离线应用 - cache manifest
  2. Linux内核Socket参数调优
  3. 在HTML5中,用getCurrentPosition()获取用户的当前位置
  4. Win10微软帐户切换不回Administrator本地帐户的解决方法【亲测】
  5. word计算机基础知识试题及答案,计算机基础知识试题及答案(一)
  6. rp文件,怎么用浏览器预览
  7. java代理模式的应用场景
  8. ArcGis——raster calculator
  9. 常见阿拉伯数学符号以及拼写
  10. CF1219G Harvester 题解
  11. XShell免费版的安装配置教程以及使用教程
  12. 益聚星荣:今年双11,薇娅失去了“全网最低价”?
  13. Tesla技术方案深度剖析:自动标注/感知定位/决策规划/场景重建/场景仿真/数据引擎...
  14. 小程序Git问题:ERROR: credentials callback returned an invalid cred type解决方法
  15. 数学模型奶制品生产c语言编程,数学模型 奶制品的生产与销售.ppt
  16. 戴尔服务器怎么安装win7系统,展示戴尔电脑如何重装win7
  17. 在图片上添加文字和图片
  18. 企业为什么要用知识管理系统?
  19. 中国电信开发者星球c语言题库,中国电信笔试真题
  20. Delphi易主Embarcadero

热门文章

  1. Python--如何计算皮尔逊相关系数(Pearson correlation coefficient)
  2. 基于关联规则与可平面图的商品摆放规划-----实验报告
  3. 安装scrapy报错failed with error code 1 in C:\Users\ADMINI~\AppData\Local\Temp\pip-install-4447ozxq\Twist
  4. 切换cuda版本之后/usr/local/cuda/lib64找不到的问题
  5. swiper + vue 中间大两边小轮播图
  6. 总结在使用vue-photo-preview---图片查看大图插件,点击图片无法显示预览等问题
  7. 一分钟煮鸡蛋好吃又有营养 - 生活至上,美容至尚!
  8. 涛思数据TDengine启动报错,提示localEp is different from localhost.localdomain:6030
  9. 【软件工程系列】软件项目管理
  10. RocketMQ学习笔记(持续更新)