SpringBoot学习总结——配置文件

一、YAML用法

1、简介

springboot默认有两种配置文件

  • application.properties
  • application.yml(建议使用)
    文件名固定,存放在classpath:/或classpath:/config/目录下
    可以通过配置文件修改springboot的默认配置
    例如 server.servlet.context-path=/springboot 设置访问路径server.servlet.context-path详细用法
    注:springboot2.0中部分配置与springboot1.0中不同,有的被重命名或删除

2、YAML用法

YAML不是一种标记语言,是专门来写配置文件的语言,以数据为中心,简洁和强大,比xml、properties等更适合配置文件的编写

YAML文件的后缀名为.yml或.yaml

两者比较

  • yaml
    在这里插入图片描述

  • properties
    在这里插入图片描述

YAML语法规则

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许
  • 使用Tab键进行缩进,只能使用空格(IDEA中Tab默认为四个空格)
  • 缩进的空格数目不重要,重要的是相同层级的元素左侧要对齐
  • ’ # '表示注释
server:
    port: 8081	# 写法 key: value,冒号后面必须有空格
    servlet:
        context-path: /springboot 

基本用法

YAML支持的数据结构有三种:

  • 字面量:单个的,不可再分的值
  • 对象:键值对的集合
  • 数组:一组按次序排列的值

三种数据结构的用法:

  1. 字面量:普通的值,如数字、字符串、布尔值
number: 12.5
str: hello
name: 'tom cruise'	#如果字符串包含空格或特殊字符,则必须使用引号引起来,单引号双引号都可以,但有区别
name1: "tom \n cruise"	#会对特殊字符进行转义,会被作为普通字符输出,结果为:tom \n cruise
name2: 'tom \n cruise'	#不会对特殊字符进行转义,结果为:tom 换行 cruise
  1. 对象:也称为映射Map,包含属性和值
#写法1:换行写
user:
    name: tom
    age: 20
    sex: male
#写法2:行内写法
user: {name: tom,age: 20,sex: male}
  1. 数组:如List、Set等
#写法1:一组短横线开头的行
names:
    - tom
    - jack
    - alice
#写法2:行内写法
name: [tom,jack,alice]

二、为属性注入值

通过加载配置文件,为类中的属性注入值

使用.yml配置文件

创建一个JavaBean对象(User类)
在这里插入图片描述在这里插入图片描述
application.yml文件,将要绑定的值
在这里插入图片描述
由于启动SpringBoot时已经加载了applic.yml配置文件,只需要将值绑定过去就好
方法:使用@ConfigurationProperties注解,同时把当前类添加到容器中
在这里插入图片描述
@ConfigurationProperties作用:默认读取全局配置文件获取值,将当前类中所有属性与配置文件中的user进行绑定

我们还可以在pom.xml文件中添加依赖方便编写.yml文件
在这里插入图片描述
使用properties配置文件

application.properties文件
在这里插入图片描述
注:IDEA中properties文件默认使用UTF-8/GBK编码,会出现中文的乱码

解决办法:在这里插入图片描述

重要:如果同时存在application.yml和application.properties同时存在且配置冲突,优先使用application.properties中的配置(application.properties优先级更高)

使用@Value为属性注入值
在这里插入图片描述
@Value和@ConfigurationProperties的比较

  • @Value只能一个个为属性注入值,而@ConfigurationProperties可以批量为属性注入值
  • @Value不支持为复杂类型封装,而@ConfigurationProperties支持

三、多环境配置

可以为不同环境提供不同的配置信息,如开发环境、测试环境、生产环境等

两种方式:

  • 创建多个properties文件
  • 步骤:
    1、创建不同环境的properties文件
    文件命名必须符合application-xxx.properties格式,例如:
    application-dev.properties
    application-test.properties
    application-prod.properties
    2、在application.properties文件中指定要激活的配置
#application.properties文件中指定要激活的配置文件
spring.profiles.active=dev	#激活application-dev.properties文件

  • 定义yml文档块
  • 在yml文件中使用三个短横线(- - -)定义多个文档块

步骤:
1、在yml文件中定义多个文档块,表示不同的环境配置
2、在第一个文档块中指定要激活的配置

server:
    port: 8080
spring:
    profiles:
        active: dev		#激活dev环境
---
spring:
    profiles: dev	#配置环境名称
server:
    port: 8081
---
spring:
    profiles: test
server:
    port: 8082
---
spring:
    profiles: prod
server:
    port: 8083

四、加载外部配置文件

加载properties属性文件

问题:@ConfigurationProperties默认是从全局配置文件中获取值,如果想从外部的自定义属性文件中获取值怎么办?
解决:使用@PropertySource加载外部的属性文件(可以加载多个外部的属性文件)
在这里插入图片描述
加载spring配置文件或xml文件

问题:如果确实需要将配置写在Spring的配置文件中,想加载xml文件怎么办?
解决:主配置类中使用@ImportResource加载外部的Spring配置文件
在这里插入图片描述
在这里插入图片描述
注:SpringBoot中不建议使用加载xml文件

使用注解方式添加组件

推荐使用全注解方式向容器中添加组件,使用@Configuration和@Bean注解
在这里插入图片描述

五、自动配置原理

1、执行流程

  1. SpringBoot启动时加载主配置类,开启了自动配置功能
    @EnableAutoConfiguration
  2. @EnableAutoConfiguration作用:
    利用@Import({AutoConfigurationImportSelector.class})向容器中添加一些组件(自动配置类)
    查看AutoConfigurationImportSelector中的selectImports()方法
    查看List< String > configurations = this.getCandidateConfigurations(annotationMetadata, attributes); 获取候选配置
    查看SpringFactoriesLoader.loadFactoryNames方法
    查看loadSpringFactories()方法
    查看classLoader.getResources(“META-INF/spring.factories”)
    扫描所有Jar包路径下的META-INF/spring.factories文件并加载,获取EnableAutoConfiguration对应的值(在spring-boot-autoconfigure-2.0.3.RELEASE.jar中)
    将这些自动配置类(xxxAutoConfiguration) 添加到容器中
  3. 通过这些自动配置类来完成响应的自动配置功能

2、原理分析

以HttpEncodingAutoConfiguration为例,就是以前在web.xml文件中配置的CharacterEncodingFilter过滤器

在这里插入图片描述在这里插入图片描述在这里插入图片描述注意:

  • 根据当前不同的条件判断,决定自动配置类是否生效,即并不是所有的自动配置类都会生效
  • 自动配置类xxxAutoConfiguration的属性是从对应的xxxProperties类中获取的
  • xxxProperties类中的所有属性是通过配置文件注入绑定的,我们可以通过配置文件指定这些属性的值

3、总结

  • SpringBoot启动时会加载大量的自动配置类
  • 通过这些自动配置类向容器中添加组件
  • 通过这些组件来自动完成许多功能,简化配置
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值