SpringBoot中如何优雅的读取yml配置文件?
YAML是一种简洁的非标记语言,以数据为中心,使用空白、缩进、分行组织数据,从而使得表示更加简洁易读。本文介绍下YAML的语法和SpringBoot读取该类型配置文件的过程。
本文目录
一、YAML基本语法二、YAML支持的数据格式三、读取yml配置文件四、测试
一、YAML基本语法
- 以缩进代表层级关系
- 缩进不能使用tab,只能用空格
- 空格个数不重要,但是同一层级必须左对齐
- 大小写敏感
- 数据格式为,名称:(空格)值
- 注释单行用#,只能注释单行
二、YAML支持的数据格式
- 字面量:数字、字符串、布尔等不可再分的值
字符串默认不需要加单引号或者双引号,如果加双引号,它不会转义字符串里面的特殊字符,而加单引号,则会转义字符串里面的特殊字符,意思就是将特殊字符直接变为字符串输出。
例子:
key1: 1
key2: true
- 对象:即为键值对,key= value
用冒号分隔键值对(Key: Value), Key需要顶格写,前面不能有空格,冒号后面需要有一个空格然后再跟值, 相同的缩进属于同一个map。
例子:
server:
port: 8888
servlet:
context-path: /
- 数组:一组按顺序排列的值
用-来表示数组中的一个元素。
例子:
wechat:
mp:
configs:
- appid: appid1
secret: arr1_secret
token: arr1_token
aesKey: arr1_key
msgDataFormat: JSON
- appid: appid2
secret: arr2_secret
token: arr2_token
aesKey: arr2_key
msgDataFormat: JSON
三、读取yml配置文件
新建一个spring boot项目spring-boot-encry,按照下面步骤操作。
- 新建配置文件
application.yml内容如下:
wechat:
mp:
configs:
- appid: appid1
secret: arr1_secret
token: arr1_token
aesKey: arr1_key
msgDataFormat: JSON
- appid: appid2
secret: arr2_secret
token: arr2_token
aesKey: arr2_key
msgDataFormat: JSON
server:
port: 8888
servlet:
context-path: /
- 添加配置文件对应的实体类
实体类添加注解,@ConfigurationProperties,@ConfigurationProperties注解可以自定义实体类,映射yml或者properties文件,自动为对象bean属性捆绑数据。
WxMpProperties代码如下:
@Data
@ConfigurationProperties(prefix = "wechat.mp")
public class WxMpProperties {
private List<MpConfig> configs;
@Data
public static class MpConfig {
/**
* 设置微信公众号的appid
*/
private String appId;
/**
* 设置微信公众号的app secret
*/
private String secret;
/**
* 设置微信公众号的token
*/
private String token;
/**
* 设置微信公众号的EncodingAESKey
*/
private String aesKey;
}
}
- 添加controller
添加读取yml文件的controller,打印yml配置信息,代码如下:
/**
* 读取yml文件的controller
*
* @Authro Java碎碎念
*/
@Slf4j
@RestController
public class TestReadYmlController {
@Value("${server.port}")
private Integer port;
@Autowired
private WxMpProperties wxMpProperties;
@RequestMapping("/readYml")
public void readYml() {
log.info("server.port=" + port);
log.info("wxMpProperties=" + JSON.toJSONString(wxMpProperties));
}
}
四、测试
打开浏览器访问:http://localhost:8888/readYml,可看到后台已经打印了yml配置文件里的信息,说明读取成功。
日志内容如下:
server.port=8888
wxMpProperties={"configs":[{"aesKey":"arr1_key","appId":"appid1","secret":"arr1_secret","token":"arr1_token"},{"aesKey":"arr2_key","appId":"appid2","secret":"arr2_secret","token":"arr2_token"}]}
到此SpringBoot读取yml配置文件功能已经全部实现,有问题欢迎留言沟通哦!
完整源码地址: https://github.com/suisui2019/springboot-study
点击文章底部”阅读原文“可以直达源码地址。
推荐阅读
1.SpringBoot中如何灵活的实现接口数据的加解密功能?
2.SpringBoot中神奇的@Enable*注解?
3.Java中Integer.parseInt和Integer.valueOf,你还傻傻分不清吗?
4.SpringCloud系列-整合Hystrix的两种方式
5.SpringCloud系列-利用Feign实现声明式服务调用
限时领取免费Java相关资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo/Kafka、Hadoop、Hbase、Flink等高并发分布式、大数据、机器学习等技术。
关注下方公众号即可免费领取:
Java碎碎念公众号
SpringBoot中如何优雅的读取yml配置文件?的更多相关文章
- SpringBoot中如何优雅的使用多线程
SpringBoot中如何优雅的使用多线程 当异步方法有返回值时,如何获取异步方法执行的返回结果呢?这时需要异步调用的方法带有返回值CompletableFuture
- SpringBoot读取.yml配置文件最常见的两种方式-源码及其在nacos的应用
一.前言 我们在开发中会经常遇到一些可能会变的值,比如数据库的密码,一些关键链接的配置等等. 都需要我们写在配置文件中,这样可以把这些配置文件放到nacos上进行管理,修改nacos的配置,咱们发布的 ...
- SpringBoot启动如何加载application.yml配置文件
一.前言 在spring时代配置文件的加载都是通过web.xml配置加载的(Servlet3.0之前),可能配置方式有所不同,但是大多数都是通过指定路径的文件名的形式去告诉spring该加载哪个文件: ...
- JAVA读取yml配置文件指定key下的所有内容
先引入需要的依赖 <!--读取yml文件--> <dependency> <groupId>org.yaml</groupId> <artifac ...
- Springboot 项目中 xml文件读取yml 配置文件
<bean id="yamlProperties" class="org.springframework.beans.factory.config.YamlProp ...
- Springboot:属性常量赋值以及yml配置文件语法(四)
方式一: 注解赋值 构建javaBean:com\springboot\vo\Dog 1:@Component:注册bean到spring容器中 2:添加get set toString方法 3:使用 ...
- SpringBoot中logback.xml使用application.yml中属性
教你如何使用 springProfile 与 springProperty 让你的logback.xml 配置显得更有逼格,当别人还在苦苦挣扎弄logback-{profile}.xml的时候 你一个 ...
- IDEA启动springboot项目找不到application.yml配置文件
idea启动项目时读取不到application-pro.yml文件,但是配置文件都在resource目录下: 解决:target/classes 目录是IDEA的classpath目录,项目编译后配 ...
- Springboot中修改.properties文件为.yml文件时项目不能运行问题
可能很多小伙伴会考虑环境配置的问题,maven版本.idea版本什么的,其实没有必要 只要你之前.ies时能运行,那么环境配置就没有问题 不能运行的原因,一定是你的.yml文件的格式问题 .yml文件 ...
随机推荐
- TCP通信 -C/S中的Socket与ServerSocket
客户端类:Socket类 TCP通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器的数据,两次IO流 java.lang.Object 继承者 java.net.Socket 构造方法: ...
- win10下安装npm&cnpm步骤
1.node官网下载安装包 2.分别输入node -v,npm -v检查是否完成 3.配置npm的全局模块的存放路径以及cache的路径,新建node_global和node_cache文件,以下是我 ...
- 基于Docker搭建大数据集群(七)Hbase部署
基于Docker搭建大数据集群(七)Hbase搭建 一.安装包准备 Hbase官网下载 微云下载 | 在 tar 目录下 二.版本兼容 三.角色分配 节点 Master Regionserver cl ...
- javascript:history.go(-1)的使用
1.问题描述 在微信项目开发中,比如常用联系人的增删改查操作中,比如跳入常用联系人管理页面,选中一个联系人修改它,就会跳入修改页面,修改完成后跳转到常用联系人管理页面,此时如果修改成功跳转采用的是页面 ...
- 教老婆学Linux运维(二)Linux常用命令指南【上】
目录 教老婆学Linux(二)Linux常用命令指南[上] 一.概述 二.常用命令 教老婆学Linux(二)Linux常用命令指南[上] 作者:姚毛毛的博客 tips:文章太长,分两篇发出,本篇发前三 ...
- 3. Git与TortoiseGit基本操作
1. GitHub操作 本节先简单介绍 git 的使用与操作, 然后再介绍 TortoiseGit 的使用与操作. 先看看SVN的操作吧, 最常见的是 检出(Check out ...), 更新 (U ...
- 43 道检验基础的 JavaScript 面试题
导读 这两天的GitHub Trending repositories被一个名叫 javascript-questions的项目霸榜了,项目中记录了一些JavaScript题目. 文中有些点作者解释的 ...
- 版本控制之Git小结
一.版本控制 1.1 什么是版本控制 版本控制是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况的系统.可以对任何类型的文件进行版本控制. 1.2 为什么需要版本控制 有了版本控制就可以 ...
- Redis系列总结--这几点你会了吗?
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 前面几篇已经对Redis中几个关键知识点做了介绍,本篇主要对Redis系列做一下总结以及对Redis中常见面试 ...
- 低效sql语句执行缓慢引起的大量占用服务器的CPU问题处理 (优化心得)
1> 2> 3> 4> 5>删除不良的执行计划后执行时间仍然有150s,这实在是太慢了,继续查看原sql代码,发现父表的关联条件放在了子查询里,这是应该避免的 调整原sq ...