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文件 ...
随机推荐
- Spring入门教程
Spring新手入门教程,配套下面这两个大神的课程就可以了. 一个是Spring视频教程. 一个是Spring博客教程. https://www.imooc.com/learn/196 http:// ...
- 极光推送JPush
推送ios以及android信息,简单的基于jpush v2带IMEI的推送实现. maven: <dependency> <groupId>cn.jpush.api</ ...
- 【linux】【jenkins】自动化运维五 整合邮件提醒
1.安装插件 Email Extension Template Plugin 安装教程参考:https://www.cnblogs.com/jxd283465/p/11542680.html 2.系统 ...
- moment实现计算两个时间的差值
var m1 = moment('2018-08-14 11:00:00'), m2 = moment('2018-08-14 12:10:00'); console.log(m1)console.l ...
- 网关鉴权后下游统一filter获取用户信息
1. 场景描述 最近有点忙,在弄微服务nacos+springcloud gateway这块工作,以前只是简单应用,这次因为要对接10几个系统或者平台,还的鉴权,等后续稍微闲点了,把这块东西总结下. ...
- Django之使用celery和NGINX生成静态页面实现性能优化
性能优化原理: 当我们要给client浏览器返回一个页面时,我们需要去数据库查询数据并将数据和基本页面模板渲染形成页面返回给客户端,但如果每一个用户访问时都去查询一次首页的的数据时,当日访问量很大时那 ...
- spring5 源码深度解析----- 创建AOP代理之获取增强器
在上一篇的博文中我们讲解了通过自定义配置完成了对AnnotationAwareAspectJAutoProxyCreator类型的自动注册,那么这个类到底做了什么工作来完成AOP的操作呢?首先我们看看 ...
- ieTESTER浏览器使用ie6崩溃问题
打开浏览器在选项--internet属性--连接--局域网设置--将自动检测设置的对勾勾掉就可以 重启下浏览器
- VirtualBox 启动时提示“获取 VirtualBox COM 对象失败”的解决
昨天给电脑打了一堆补丁和更新,今天启动 VirtualBox 的时候提示 “获取 VirtualBox COM 对象失败”,好在百度到了 CSDN 上的一篇文章解决了这个问题. 错误详情 “获取 Vi ...
- 详解PHP魔术函数、魔术常量、预定义常量
一.魔术函数(13个) 1.__construct() 实例化对象时被调用, 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用. 2.__des ...