SpringBoot中yaml配置对象
转载请在页首注明作者与出处
一:前言
YAML可以代替传统的xx.properties文件,但是它支持声明map,数组,list,字符串,boolean值,数值,NULL,日期,基本满足开发过程中的所有配置。
长期以来,我们使用xml配置文件与properties配置文件。但是YAML却基本无人使用,故有了此文
二:常用配置文件的优缺点及演示
2.1:优缺点
XML优点:xml配置文件所用最多的地方就是spring的配置文件了。当然,它也很灵活,它以自定义的标签可以满足种种需要,而且可以声明多个同样的标签。
XML缺点:配置起来麻烦,读取繁琐。
properties优点:读取简单,配置简单,spring可以直接加载properties文件,不需要我们写代码读取。
properties缺点:但是不支持配置多个同样的属性,这是最大的缺点。
2.2:优缺点演示
这里演示一下properties的缺点。
假定我有一个应用场景,我需要配置多台redis做为redis的集群。
现在写properties的配置文件
redis.ip=10.1.10.1
redis.port=
redis.password=
好吧,我只能配置一个。
当然,其实我也可以这样配置
#第一台
redis1.ip=10.1.10.1
redis1.port=
redis1.password=123456
#第二台
redis2.ip=10.1.10.1
redis2.port=6379
redis2.password=123456
以上面的这种配置,我基本上可以无限的配置,但是这对于代码上面读取又是一个问题,我根本不知道配置文件中配置了多少个节点。
这个时候我会想到xml的配置方式,它灵活,多变。
<xml>
<redis>
<node>
<ip>10.1.2.1</ip>
<port>6379</port>
<password>123</password>
</node>
<node>
<ip>10.1.2.1</ip>
<port>6379</port>
<password>123</password>
</node>
<node>
<ip>10.1.2.1</ip>
<port>6379</port>
<password>123</password>
</node>
<node>
<ip>10.1.2.1</ip>
<port>6379</port>
<password>123</password>
</node>
</redis>
</xml>
xml这种方式就完全支持多个节点的配置,我只需要遍历redis下的所有node节点就行了,但是它的配置与读取就相对繁琐了。
三:YAML的配置文件
第一次接触YAML是在spring-boot中的,刚开始接触的时候也是有点抵制,但是慢慢的就越来越喜欢它了。
3.1:基本用法
yml不能用制表符,必须输入空格,但是可以输入任意个空格,只需要对齐就行了。
project:
redis:
ip: 10.8.16.232 #冒号后台必须接空格,读取的时候会去掉前后空格,用#可以进行注释
port: 6379
mysql:
url: jdbc://....
user: root
password: 111
这是一个简单的yaml,它就相当于properties中的
project.redis.ip=10.8.16.232
project.redis.port=6379
project.mysql.url=xxx
project.mysql.root=12
project.mysq.password=xx
可以看到yml就省略了前面的部分,并且在spring中,使用@Value()注解,同样可以把该值取出来
3.2:配置对象
现在我们用yml来解决之前遇到配置多个redis的问题
xx:
test:
hehe: normal
txtarray: 1,2,3,a #这种对象形式的,只能单独写一个对象去接收,所以无法使用@value注解获取
listmap:
- host: zxj
port: 10
active: 9
- host: ly
port: 11
active: 8
liststr:
- name
- value
map:
a: a
b: b
可以看到在xxx.test.listmap中,我们定义了两个集合,以- 开头的,就是代表着数组集合。
可以参考 http://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt 来学习YAML的语法
3.2:java读取
在spring-boot中,定义一个application.yml,然后写入上面的配置,
然后定义这样一个类
import java.util.Arrays;
import java.util.List;
import java.util.Map; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; /**
* @author 朱小杰
* @since 2016年11月14日 上午10:33:36
* 版本 1.0<br>
* @see 需要生成set方法
*/
@Component
@ConfigurationProperties(prefix = "xx.test")
public class ConfigProperties { private String hehe; private String[] txtarray; private List<Map<String,String>> listmap; private List<String> liststr; private Map<String,String> map; /**
* @param 设置 hehe
*/
public void setHehe(String hehe) {
this.hehe = hehe;
} /**
* @param 设置 txtarray
*/
public void setTxtarray(String[] txtarray) {
this.txtarray = txtarray;
} /**
* @param 设置 listmap
*/
public void setListmap(List<Map<String, String>> listmap) {
this.listmap = listmap;
} /**
* @param 设置 liststr
*/
public void setListstr(List<String> liststr) {
this.liststr = liststr;
} /**
* @return 获取 hehe
*/
public String getHehe() {
return hehe;
} /**
* @return 获取 txtarray
*/
public String[] getTxtarray() {
return txtarray;
} /**
* @return 获取 listmap
*/
public List<Map<String, String>> getListmap() {
return listmap;
} /**
* @return 获取 liststr
*/
public List<String> getListstr() {
return liststr;
} /**
* @return 获取 map
*/
public Map<String, String> getMap() {
return map;
} /**
* @param 设置 map
*/
public void setMap(Map<String, String> map) {
this.map = map;
} /**
* @see [说明这个方法]
* @return
* @since 2016年11月14日 上午10:38:49
*/
@Override
public String toString() {
return "ConfigProperties [hehe=" + hehe + ", txtarray=" + Arrays.toString(txtarray) + ", listmap=" + listmap
+ ", liststr=" + liststr + ", map=" + map + "]";
} }
属性名必须与YAML中的参数名一致,必须声明get/set方法,get与set都要。而且使用了yaml的对象,不能使用@Value("${}")注解来获取值,当然,如果是普通的映射是可以的,数组,map,list这种是不行的,只能通过上面的方式,注入到一个对象里面去,
然后再@Autowird取这个对象来获取值
SpringBoot中yaml配置对象的更多相关文章
- (二)Redis在Mac下的安装与SpringBoot中的配置
1 下载Redis 官网下载,下载 stable 版本,稳定版本. 2 本地安装 解压:tar zxvf redis-6.0.1.tar.gz 移动到: sudo mv redis-6.0.1 /us ...
- springboot 中yml配置
springboot 中各种配置项纪录 1. @Value 最早获取配置文件中的配置的时候,使用的就是这个注解,SpEL表达式语言. // 使用起来很简单 @Value("${config. ...
- Springboot中以配置类方式自定义Mybatis的配置规则(如开启驼峰映射等)
什么是自定义Mybatis的配置规则? 答:即原来在mybatis配置文件中中我们配置到<settings>标签中的内容,如下第6-10行内容: 1 <?xml version=&q ...
- 案例源码解读及思路:RabbitMQ在springboot中的配置
程序员的高级之处不是什么都会,而是对自己不会的进行抽象,然后完成自己的工作.比如对于RabbitMQ,按照字面理解,就将其看成Message Queue,也就是用来容纳对象的集合.很多功能都拆分给一个 ...
- springboot中xml配置之@ImportResource
springboot中进行相关的配置往往有java配置和xml配置两种方式. 使用java的方式配置只需要使用@configuration注解即可,而使用xml的方式配置的话需要使用@ImportRe ...
- SpringBoot中注入ApplicationContext对象的三种方式
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 在项目中,我们可 ...
- SpringBoot中日志配置
背景 由于一些框架中还使用log4j-1.x系列陈旧的日志框架,调试过程中有一些错误信息不能在控制台显示,增加了调试成本.以下配置方法 将帮助你获得log4j-1.x日志在控制台显示. 解决方法: 使 ...
- kafka+windows+java+springboot中的配置
1.百度kafka+zookeeper+windows配置 1.1 zookeeper配置 dataDir=/tmp/zookeeper # the port at which the client ...
- Hibernate中的配置对象
数据库连接:由 Hibernate 支持的一个或多个配置文件处理.这些文件是 hibernate.properties 和 hibernate.cfg.xml. 类映射设置:这个组件创造了 Java ...
随机推荐
- dll文件32位64位检测工具以及Windows文件夹SysWow64的坑
自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...
- Javascript实现HashTable类
散列算法可以尽快在数据结构中找出指定的一个值,因为可以通过Hash算法求出值的所在位置,存储和插入的时候都按照Hash算法放到指定位置. <script> function HashTab ...
- 【算法】(查找你附近的人) GeoHash核心原理解析及代码实现
本文地址 原文地址 分享提纲: 0. 引子 1. 感性认识GeoHash 2. GeoHash算法的步骤 3. GeoHash Base32编码长度与精度 4. GeoHash算法 5. 使用注意点( ...
- java设计模式之单例模式(几种写法及比较)
概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...
- Android开发学习—— Broadcast广播接收者
现实中:电台要发布消息,通过广播把消息广播出去,使用收音机,就可以收听广播,得知这条消息.Android中:系统在运行过程中,会产生许多事件,那么某些事件产生时,比如:电量改变.收发短信.拨打电话.屏 ...
- Git使用详细教程(二)
分支 其实在项目clone下来后就有一个分支,叫做master分支.新建分支的步骤:右键项目→Git→Repository...→Branches... master分支应该是最稳定的,开发的时候,建 ...
- Redis配置文件redis.conf
1.地址 2.Units单位 1 配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit 2 对大小写不敏感 3.includes包含
- 喜马拉雅音频下载器 V1.2 支持专辑批量下载 喜马拉雅mp3下载导出 喜马拉雅下载器
出差一个星期回来看邮箱,发现好多网友评论说网站又更新了,老程序不能用了,有热心网友放出修改版的,我就不重复造车了..大家可以去这里下载 http://blog.csdn.net/suqingheang ...
- CYQ.Data V5 从入门到放弃ORM系列:教程 - MProc类使用
MProc介绍 MProc:是一个用于执行SQL或存储过程的数据库操作类,它轻量高性能地类似于Dapper. MProc:它出现的场景很少,因为MAction自身就能处理掉90%-100%的数据操作( ...
- 【腾讯Bugly干货分享】微信终端跨平台组件 Mars 系列 - 我们如约而至
导语 昨天上午,微信在广州举办了微信公开课Pro.于是,精神哥这两天的朋友圈被小龙的"八不做"刷屏了.小伙伴们可能不知道,下午,微信公开课专门开设了技术分论坛.在分论坛中,微信开源 ...