属性配置
在resources包下的application.properties文件中可以修改SpringBoot的配置
properties格式的文件书写规范是key=value
如端口的配置:
server.port=80
关闭运行日志图表(banner)
spring.main.banner-mode=off
设置运行日志的显示级别
logging.level.root=debug
而SpringBoot可配置的项很多,可以到官网中查阅:
注:这些配置可以使用的前提是引入了对应的依赖
配置文件分类
SpringBoot提供了三种配置文件的格式:
- properties格式(默认格式)
- yml格式(主流)
- yaml格式
properties格式:
server.port=80
yml格式:
server:
port: 81
yaml格式:
server:
port: 82
注:yml和yaml的格式完全一样,仅文件名后缀不同,可以看作一种格式
配置文件优先级
当多个配置文件存在时,根据配置文件内部的配置有以下情况:
1.当不同配置文件中的配置不同时:
如properties文件中配置了端口,yml文件中配置了banner
那么最终这两项配置都会生效
2.当不同配置文件中配置了相同项时:
如properties,yml,yaml中都配置了端口
那么加载的优先级为:
application.properties > application.yml > application.yaml
自动提示功能消失
自动提示功能是idea提供了,但是idea默认只能识别properties格式的文件
这导致yml个yaml格式的文件可能会没有自动提示功能(但是配置好后仍可以正常加载使用)
可以通过:
文件->项目结构->Facet->选中对应的工程->点击上方的绿叶子
点击加号,将创建的配置文件加入进去,即可让idea将其识别为配置文件
yaml文件
简介
YAML(YAML Ain't Markup Language),一种数据序列化格式。
具有容易阅读、容易与脚本语言交互、以数据为核心,重数据轻格式的特点。
yaml,和xml,properties一样,都是一种文件的格式
其常见的文件扩展名有两种:
- .yml格式(主流)
- .yaml格式
语法规则
- 区分大小写
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
- 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
- #号 表示注释
以下是常见的数据的书写格式:
boolean: TRUE #TRUE,true,True,FALSE,false,False均可
float: 3.14 #6.8523015e+5 #支持科学计数法
int: 123 #0b1010_0111_0100_1010_1110 #支持二进制、八进制、十六进制
null: ~ #使用~表示null
string: HelloWorld #字符串可以直接书写
string2: "Hello World" #可以使用双引号包裹特殊字符
date: 2018-02-17 #日期必须使用yyyy-MM-dd格式
datetime: 2018-02-17T15:02:31+08:00 #时间和日期之间使用T连接,最后使用+代表时区
yaml格式中表示数组:
subject:
- Java
- 前端
- 大数据
enterprise:
name: itcast
age: 16
subject:
- Java
- 前端
- 大数据
likes: [video,game] #数组书写缩略格式
表示对象:
users: #对象数组格式一
- name: Tom
age: 4
- name: Jerry
age: 5
users: #对象数组格式二
-
name: Tom
age: 4
-
name: Jerry
age: 5
users2: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ] #对象数组缩略格式
数据读取
yaml文件中存储了很多数据,而这些数据也是可以读取出来的
读取单一数据
读取单一数据时,可以使用Spring中的注解@Value读取单个数据,属性名引用方式:
${属性名},如下:
当读取的数据是数组中的内容时,采用索引的方式,索引从0开始
当读取的数据是一个对象中的某个数据时,使用一级属性名.二级属性名的方式
读取全部数据
在Java文件中,可以将整个yaml文件中的全部数据封装成一个对象
这个对象叫做Environment,使用注解自动装配即可将数据封装到该对象中,如:
之后就可以使用其方法getProperties(String),参数为属性名来读取对应属性
属性名的格式和读取单一数据的格式相同
读取对象数据
我们可以将yaml中的一组数据封装成一个对象
步骤:
1.定义数据对应的类,该类中的属性名需要与yaml文件中的属性名相同
2.在类上使用@Component,让其被spring管理
3.在类上使用@ConfigurationProperties,标记需要将yaml文件中的哪个数据封装为该对象
其值的属性名就是对应的数据,值的名为value,prefix,也可以不写
4.通过自动装配创建对象,该对象中的值就是封装的数据
注:当yaml文件中有一对象名为user,且该对象中有一个属性为name,那么在使用该方式时
最终User类中的name属性的值为user
原因:SpringBoot默认中也有一个user对象,且有属性name,但是没有属性age,因此最终根据优先级相互覆盖后,name属性的值就是user,而age属性没有被覆盖,正常赋值
如果将yaml文件中user的对象名改为user1,useraaa等不会出现该情况
读取本文件的数据
在yaml文件中是可以读取本文件的属性的,格式即为读取单一数据的格式,如:
输出后:
如果需要使用转义字符,那么可以使用双引号将字符串包裹,如:
这里的\t就被识别为了一个Tab