01基础篇(D3_SpringBoot 配置文件(D1_基础配置))
目录
一、SpringBoot 基础配置
1. 基本介绍
创建 SpringBoot 工程会有一些主要信息
- pom.xml文件:设置项目的依赖的
- 引导类,执行SpringBoot程序的入口
- resources目录下面的一个空白的文件:application.properties,两个文件夹:static,templates。
2. 代码位置
3. application.properties
SpringBoot 可以通过配置文件 application.properties 修改默认的配置
例如:
当前访问tomcat的默认端口是8080,现在我们可以通过application.properties配置文件将tomcat的端口号修改为80
server.port=80
做完了端口的配置,还可以做如下配置:
- 关闭运行日志图表(banner)
spring.main.banner-mode=off
- 设置运行日志的显示级别
logging.level.root=debug
4. 配置文件分类
SpringBoot除了支持properties格式的配置文件,还支持另外两种格式的配置文件,分别如下:
1、properties格式(传统格式/默认格式)
2、yml格式(主流格式)
3、yaml格式
- application.properties(properties格式)
server.port=80
- application.yml(yml格式)
server:
port: 81
- application.yaml(yaml格式)
server:
port: 82
仔细看会发现 yml 格式和 yaml 格式除了文件名后缀不一样,格式完全一样。
是这样的,yml和yaml文件格式就是一模一样的,只是文件后缀不同,所以可以合并成一种格式来看
企业开发基本上都是用 yml 格式,所以建议使用 yml 格式。
5. 配置文件优先级
三个文件如果共存的话,会根据配置文件加载的优先级来决定配置,比如都配置端口,然后我们让每个文件配置
的端口号都不一样,最后启动程序后看启动端口是多少就知道谁的加载优先级比较高。
- application.properties(properties格式)
server.port=80
- application.yml(yml格式)
server:
port: 81
- application.yaml(yaml格式)
server:
port: 82
启动后会发现目前的启动端口为80,把80对应的文件删除掉,然后再启动,现在端口又改成了81,现在我们就已经
知道了3个文件的加载优先顺序是什么
application.properties > application.yml > application.yaml
虽然得到了一个知识结论,但是我们实际开发的时候还是要看最终的效果为准,上述结论只能帮助你分析结论产
生的原因。
- application.properties(properties格式)
server.port=80
spring.main.banner-mode=off
- application.yml(yml格式)
server:
port: 81
logging:
level:
root: debug
- application.yaml(yaml格式)
server:
port: 82
调试后,我们会发现不仅端口生效,最终显示也是80,同时其他两条配置也生效,看来每个配置文件中的项都会
生效,只不过如果多个配置文件中有相同类型的配置会优先级高的文件覆盖优先级的文件中的配置,如果配置项
不同的话,那所有的配置项都会生效
6. 自动提示功能消失解决方案
二、yaml文件
1. 简介
SpringBoot的配置以后主要使用 yml 结尾的这种文件格式,并且在书写时可以通过提示的形式加载正确的格式
但是这种文件还是有严格的书写格式要求,下面就来说一下具体的语法格式
YAML(YAML Ain't Markup Language),一种数据序列化格式,具有容易阅读、容易与脚本语言交互、以数据
为核心,重数据轻格式的特点
2. 常见文件扩展名
常见的文件扩展名有两种:
① 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: 2022-09-11 #日期必须使用yyyy-MM-dd格式
datetime: 2022-09-11T15:02:31+08:00 #时间和日期之间使用T连接,最后使用+代表时区
此外,yaml格式中也可以表示数组,在属性名书写位置的下方使用减号作为数据开始符号,
每行书写一个数据,减号与数据间空格分隔
subject:
- Java
- 前端
- 大数据
enterprise:
name: yjxz
age: 16
subject:
- Java
- 前端
- 大数据
likes: [王者荣耀,刺激战场] #数组书写缩略格式
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 } ] #对象数组缩略格式
3. 知识小结
3.1. yaml语法规则
大小写敏感
属性层级关系使用多行描述,每行结尾使用冒号结束
使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
#号 表示注释
注意属性名冒号后面与数据之间有一个空格
字面值、对象数据格式、数组数据格式
3.2. 思考
现在我们已经知道了yaml具有严格的数据格式要求,并且已经可以正确的书写yaml文件了,
那这些文件书写后其实是在定义一些数据,这些数据时给谁用的呢?
大部分是SpringBoot框架内部使用,但是如果我们想配置一些数据自己使用,能不能用呢?
答案是可以的,那如何读取yaml文件中的数据呢?
4. 代码位置
三、yaml数据读取
对于yaml文件中的数据,其实你就可以想象成这就是一个小型的数据库,里面保存有若干数据,每个数据都有一
个独立的名字,如果你想读取里面的数据,肯定是支持的,下面就介绍 3 种读取数据的方式
1. 读取单一数据
yaml中保存的单个数据,可以使用Spring中的注解直接读取,使用@Value可以读取单个数据,
属性名引用方式:${一级属性名.二级属性名……}
使用@Value注解时,要将该注解写在某一个指定的Spring管控的bean的属性名上方,现在就可以读取到对应的单一数据行了。
知识小结
- @Value配合SpEL读取单个数据
- 如果数据存在多层级,依次书写层级名称即可
2. 读取全部数据
读取单一数据可以解决读取数据的问题,但是如果定义的数据量过大,这么一个一个书写非常麻烦,
SpringBoot提供了一个对象,能够把所有的数据都封装到这一个对象中,这个对象叫做Environment,
使用自动装配注解可以将所有的yaml数据封装到这个对象中
数据封装到了Environment对象中,获取属性时,通过Environment的接口操作进行,
具体方法时getProperties(String),参数填写属性名即可
知识小结
- 使用Environment对象封装全部配置信息
- 使用@Autowired自动装配数据到Environment对象中
3. 读取对象数据
单一数据读取书写比较繁琐,全数据封装又封装的太厉害了,每次拿数据还要一个一个的
getProperties(),总之用起来都不是很舒服,由于Java是一个面向对象的语言,很多情况下,我们
会将一组数据封装成一个对象SpringBoot也提供了可以将一组yaml对象数据封装一个Java对象的
操作
首先定义一个对象,并将该对象纳入Spring管控的范围,也就是定义成一个bean,然后使用注解
@ConfigurationProperties指定该对象加载哪一组yaml中配置的信息
这个@ConfigurationProperties必须告诉他加载的数据前缀是什么,这样当前前缀下的所有属性就
封装到这个对象中,记得数据属性名要与对象的变量名 一 一 对应,不然没法封装,其实以后如果
你要定义一组数据自己使用,就可以先写一个对象,然后定义好属性,下面到配置中根据这个格式
书写即可
知识小结
- 使用@ConfigurationProperties注解绑定配置信息到封装类中
- 封装类需要定义为Spring管理的bean,否则无法进行属性注入
4. yaml文件中的数据引用
如果你在书写yaml数据时,经常出现如下现象,比如很多个文件都具有相同的目录前缀
center:
dataDir: /usr/local/fire/data
tmpDir: /usr/local/fire/tmp
logDir: /usr/local/fire/log
msgDir: /usr/local/fire/msgDir
或者
center:
dataDir: D:/usr/local/fire/data
tmpDir: D:/usr/local/fire/tmp
logDir: D:/usr/local/fire/log
msgDir: D:/usr/local/fire/msgDir
这个时候你可以使用引用格式来定义数据,其实就是搞了个变量名,然后引用变量了,格式如下:
baseDir: /usr/local/fire
center:
dataDir: ${baseDir}/data
tmpDir: ${baseDir}/tmp
logDir: ${baseDir}/log
msgDir: ${baseDir}/msgDir
还有一个注意事项,在书写字符串时,如果需要使用转义字符,需要将数据字符串使用双引号包裹起来
lesson: "Spring\tboot\nlesson"
知识小结
① 在配置文件中可以使用${属性名}方式引用属性值
② 如果属性中出现特殊字符,可以使用双引号包裹起来作为字符解析
到这里有关yaml文件的基础使用结束了
更多推荐
所有评论(0)