SpringBoot的yml配置文件(三)
二八佳人体似酥,腰间仗剑斩愚夫。虽然不见人头落,暗里教君骨髓枯。
上一章简单介绍了SpringBoot自定义banner,配置端口号和项目路径(二),如果没有看过,请观看上一章
一. 什么是YAML 配置文件
相比于 application.properties 配置文件,SpringBoot 更推荐使用 application.yml 的配置文件方式。
YAML 是 “YAML Ain’t Markup Language” 的递归缩写,是方便人类读写的一种格式,比JSON 格式还方便。
YAML 文件,采用 key–value的形式进行编写, value 可以是单个值,也可以是数组集合,也可以是对象。
properties 配置文件和yaml 配置文件,都是对以前的 *.xml 配置文件进行的简化。
一.一 Yaml 文件的优点
拿 MavenHelloWorld项目里面的配置端口号为 8027,配置项目路径为 /Lin 来看。
XML文件,就需要配置成:
<server><port>8027</port><servlet><context-path>/Lin</context-path></servlet>
</server>
Properties 文件,就需要配置成:
server.port=8027
server.servlet.context-path=/Lin
而 Yaml 文件只需要配置成:
server:port: 8027servlet:context-path: /Lin
当配置文件过多时,如 datasource数据库,redis配置,mongodb配置,shiro配置,mybatis配置等, properties文件也难于理解和阅读了。
而yaml文件,目录结构层次清晰,易于理解和阅读。
下面老蝴蝶开始讲解 Yaml 配置文件。 为了便于观察 Yaml 配置文件的输出结果,
不采用直接写出结果的方式,而采用运行输出结果的方式,
需要创建一个 SpringBoot的 Yaml 项目。
二. 创建 Yaml 项目
根据 第一章的 Maven 创建SpringBoot项目的方式,创建一个名为 Yaml 的项目。里面有pom.xml 依赖,有启动类,有测试类,也有application.properties配置文件,banner.txt 文件,还有更重要的 application.yml 配置文件。
为了便于 Bean 对象的封装,在 pom.xml 里面引入了 lombok的依赖
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>
关于配置文件的格式配置,其实是定义在 Yaml工程的父项目 spring-boot-starter-parent-2.2.2.RELEASE.pom.xml 文件里面。
可以定义成 yml,也可以是 yaml, properties.
当同时存在,造成重突时, properties配置文件的优先级最高, yml 配置文件的的优先级最低。
二.一 验证 properties和 yaml配置文件的优先级
二.一.一 application.properties配置文件
server.port=8027
server.servlet.context-path=/Lin
二.二.二 application.yml 配置文件
server:port: 8081servlet:context-path: /Yue
二.二.三 运行 YamlApplication 启动类,查看控制台输出
发现, application.properties 配置文件生效了。
将 application.properties 文件删除,只保留 application.yml 配置文件。
三. Yaml 配置文件的基本语法
三.一 基本规则
- 大小写敏感
- 使用缩进表示层级结构
- 缩进时,不使用 TAB 键进行缩进,只允许使用空格。
- 缩进时,不一定要是四个空格键,或者两个空格键,只需要保证同一层次下的元素左对齐就可以了。
- key: value 的值, : 与value 之间,需要有一个空格,进行分隔开来。
- 注释时,用 # 进行注释
三.二 放置基本的常量元素
# 放置基本的元素
name: 两个蝴蝶飞
age: 26
sex: 男
single: true
weight: 68.5
三.三 放置对象
# 放置对象
book:name: 陌生人,我送你一首诗author: 岳泽霖nickName: 两个蝴蝶飞
三.四 放置数组
# 放置数组
hobby:- 看书- 写代码- 写诗- 写博客
三.五 单引号,双引号
# 放置特殊的字符串
str:desc1: 我是两个蝴蝶\n飞 # 变成: 我是两个蝴蝶\n飞desc2: "我是两个蝴蝶\n飞" # 会变成: 我是两个蝴蝶# 飞desc3: '我是两个蝴蝶\n飞' # 会变成: 我是两个蝴蝶\n飞
字符串,不用加 单引号,或者双引号。
双引号,不会进行转义,将 \n 变成换行回车
单引号,会进行转义, \n 还是\n.
三.六 合理的嵌套使用
book:name: 陌生人,我送你一首诗author: 岳泽霖nickName: 两个蝴蝶飞# 放置数组hobby:- 看书- 写代码- 写诗- 写博客info:name: 两个蝴蝶飞age: 26sex: 男single: trueweight: 68.5
这样,完全是合法的。
三.七 配置占位符
name2: 老蝴蝶${random.uuid} # 随机生成 uuid
age2: ${random.int} # 随机生成int范围内的值,-2^31~2^31-1
三.八 配置引用和默认值
info1: ${book.author} # 引入book对象里面的 author属性
info2: ${book.info:张三} # 引用book对象里面的info属性,如果没有,取:后面的默认值,张三
四. 读取application.yml 里面的配置文件
四.一 构建基本的配置文件读取信息
# 放置基本的元素
name: 两个蝴蝶飞
single: false
age: 26
# 放置对象
book:name: 陌生人,我送你一首诗author: 岳泽霖score: 0.00hobby:- 看书- 写代码- 写诗- 写博客
addr: ${book.addr:暂无地址}
四.二 采用 Bean 对象进行接收
在pojo 包下,新创建两个类用于接收数据
四.二.一 SingleInfo 类接收主体对象
@Data
public class SingleInfo {private String name;private Boolean single;private Integer age;private String addr;private Book book;
}
四.二.二 Book 类接收书籍
@Data
public class Book {private String name;private String author;private Double score;private String[] hobby;
}
四.三 采用 Spring的 @Value 进行接收
四.三.一 添加组件注解和@Value注解
@Data
@Component
public class SingleInfo {@Value("${name}")private String name;@Value("${single}")private Boolean single;@Value("${age}")private Integer age;@Value("${addr}")private String addr;//暂时不处理private Book book;
}
四.三.二 测试运行
@SpringBootTest
class YamlApplicationTests {@Autowiredprivate SingleInfo singleInfo;@Testvoid contextLoads() {System.out.println(singleInfo);}
}
测试运行:
能够获取到相应的数据。
但是这种方式,需要对属性一个一个的封装。
book 没有添加相应的注解,故输出为 null
四.四 采用 @ConfigurationProperties 进行封装
四.四.一 在SingleInfo 类上面,添加 @ConfigurationProperties 注解
这个注解,一定要记住。 Configuration+Properties ,组成了 @ConfigurationProperties
Idea 提示让打开文档,那就打开文档,目前发现文档链接已经打不开了。
解决方案,添加 spring-boot-configuration-processor 依赖即可。
四.四.二 添加依赖
在 pom.xml 里面,添加 spring-boot-configuration-processor 依赖
<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>
添加依赖之后,重启就好了。
四.四.三 测试运行
发现, book 属性也自动填充了,即使 Book 类没有添加 @Component 组件注解。
四.四.四 为 @ConfigurationProperties 添加前缀prefix
SingleInfo 一定提示:
但是我们这个类,前面没有任何前缀啊。 所以用 Book 类进行演示。
四.四.四.一 Book 类添加组件和@ConfigurationProperties 注解
@Component
@ConfigurationProperties(prefix = "book")
四.四.四.二 测试 Book类的自动填充
Book 正常的填充。
四.五 @PropertySource 注解进行封装
@ConfigurationProperties 并没有添加关于属性文件的配置信息,它怎么知道,要读取的是哪一个配置文件呢? 发现,我们将 yaml配置信息放置在了 application.yml(SpringBoot的全局配置文件), 答案就在这儿。
@ConfigurationProperties 会默认从全局配置文件中获取值
在 resoruces 下面,添加 myapplication.yml 配置文件,里面放置 四.一 里面的内容,并且从 application.yml 里面移除四.一里面的内容
四.五.一 测试验证,看是否读取了
Book 取消相应的注解。
SingleInfo 保持不变。
运行没有报错,但没有读取到相应的信息。
四.五.二 通过 @PropertySource 进行指定配置文件
通过 @PropertySource 注解指定文件路径时,就需要 用 @Value 一个个进行绑定属性,否则会无法绑定相应的属性。
运行程序, 发现运行成功了,但是会中文乱码。
@PropertySource 注解,支持添加 encoding 来指定编码。
@PropertySource(value = "classpath:myapplication.yml",encoding = "UTF-8")
添加encoding 属性后,继续运行程序:
乱码问题解决。
老蝴蝶为什么不演示 Book 绑定,或者在 SingleInfo 对象里面绑定 book呢? @Value属性,不支持这么绑定。
四.六 @ConfigurationProperties 与 @Value 注解比较
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 需要一个个指定属性,分别绑定 |
松散绑定 | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
如果我们只需要获取到配置文件中某一个值的话,可以使用 @Value
如果需要获取到多个值的话,还与 JavaBean 进行绑定,最好使用 @ConfigurationProperties 。
本章节的代码放置在 github 上:
https://github.com/yuejianli/springboot/tree/develop/Yaml
谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!
SpringBoot的yml配置文件(三)相关推荐
- SpringBoot的yml配置文件
1.在src\main\resources下创建application.yml配置文件 spring: datasource: driver-class-name: com.mysql.jdbc.Dr ...
- SpringBoot中yml配置文件:定义list集合、数组及注意事项
点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/you18131371836/article/ details/104839901 1.在平时的yml配置文件中,我们经常使用到 ...
- springboot的yml配置文件绑定时必须和相应的类中的属性类型对应,不然启动报错
今天启动springboot应用时一开始一直是error,访问localhost也无法打开: 此时自己的Person.java: package boot.bean; import lombok.Da ...
- springboot yaml/yml配置文件字符串换行
前言 springboot 2.1.1.RELEASE yaml配置文件字符串换行 需要把RSA公钥放到配置文件中,因字符串太长,为了方便维护,将公钥换行. publicKey: "MIIB ...
- SpringBoot - application.yml配置文件中yes/no,on/off在代码中读取的值为true/false
写在前面 在SpringBoot的项目中,当在配置文件中配置的值为yes/no或者on/off时,在SpringBoot内部解析时会将yes/no,on/off解析为true/false. 参数配置 ...
- 解决SpringBoot的yml配置文件报错: org.yaml.snakeyaml.parser.ParserException: while parsing a block mapping
问题描述 今天在SpringBoot的application.yml中新增了一个配置项: 但是启动的时候报错了,错误如下所示: org.yaml.snakeyaml.parser.ParserExce ...
- springboot在yml配置文件中配置类的属性笔记
首先建立一个简单的实体类,我这里以学生为例,并加上@Component和@ConfigurationProperties(prefix ="student")注解,其中prefix ...
- db2 springboot 整合_springboot的yml配置文件通过db2的方式整合mysql的教程
springboot整合MySQL很简单,多数据源就master,slave就行了,但是在整合DB2就需要另起一行,以下是同一个yml文件 先配置MySQL,代码如下 spring: datasour ...
- db2 springboot 整合_springboot的yml配置文件通过db2的方式整合mysql代码示例
本篇文章小编给大家分享一下springboot的yml配置文件通过db2的方式整合mysql代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. s ...
- SpringBoot - 动态修改yml配置文件
目录 前言 具体实现 实现代码 测试 源码 前言 记录下SpringBoot修改yml配置文件后无需重启服务的方式(打包后生效),效果如下: 具体实现 实现代码 pom.xml <depende ...
最新文章
- Java:多线程之线程池
- C#6.0语言规范(八) 语句
- sublime text3搭建react native
- .NET CORE下最快比较两个文件内容是否相同的方法
- 荐书 | 10本书给你计算机大师思维
- python中 1.34e3_Python快速编程入门——第2章 Python基础语法
- 通过社交网络进行OWIN OAuth2身份验证
- 使用HTML和CSS格式化DBMail
- 数学建模论文写作模板
- Louvain社区划分算法及Java语言实现
- shell脚本日常机房巡检
- aimesh r6400 开_r6900+r6300v2 aimesh 连接成功!点滴分享
- u盘误删的文件怎么找回?帮你轻松找回
- ...可变形参的使用
- 【深度学习实战04】——SSD tensorflow图像和视频的目标检测
- 串应用- 计算一个串的最长的真前后缀
- 推荐几个学习嵌入式及Linux比较好的网站或博客
- vue案例QQ好友列表
- php美团团购项目,微信小程序如何实现美团菜单
- 基于华为mate10 与iphone x 的拆机手册对比的
热门文章
- Spring Boot(八)——Shiro+FreeMarker
- 李开复:AI巨头是有史以来最难以打破的垄断 | 谷歌和腾讯参投中国AI企业深圳晶泰科技
- 怎么在WPS计算机,电脑怎么把wps热点删了?电脑永久删除wps热点的方法
- 应用wps对证件照进行更改颜色,更换只需三步。
- Python 三大神器:pip,virtualenv(virtualenvwrapper),fabric
- mysql的执行计划_MySQL——执行计划
- python数据科学包第三天(股票数据分析、时间事件日志)
- 单摄像机对于二维平面的测量
- GitHub远程拉取仓库项目提示Please use a personal access token instead.解决方法
- k8s节点假死排查记录