SpringBoot开发详解(三)--SpringBoot配置文件YML注意事项

原创 2017年04月16日 20:00:12
  • 11289

YML读取注意事项

使用YML时遇到的坑: 
最近在做项目时,遇到了一些在读取YML配置时发生的问题,在这里写一并写下来,希望给自己以及大家一个提示,能尽量避免在读取配置文件时发生这些错误,给开发带来不必要的多余时间去处理。

多重层级读取

在YML中我们再添加一个ZZP2的配置信息,其中包含了girl节点以及girl下的name,age属性。

zzp2:name: 西科啦啦age: 30height: 175cmweight: 760kglong: 10cmgirl:name: Marry.Jeanage: 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

和之前一样,我们controller中通过@Value注解来获取属性值,同时创建一个url来输出我们的属性值。

@Value("${zzp2.name}")
private String name2;@Value("${zzp2.girl.age}")
private Integer girlAge;@Value("${zzp2.girl.name}")
private String girlName;@RequestMapping(value = "/getZzpGirlInfo",method = RequestMethod.GET)
public String getZzpGirlInfo(){return "zzp2.name:" + name2 + "\n" + "zzp2.girl.age:" + girlAge + "\n" + "zzp2.girl.name:" + girlName;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

接下来我们通过POSTMAN来访问下,可以看到使用注解@Value没有问题,都可以渠道属性值。 

接下来我们按照之前的思路建立一个Zzp2properties来将配置文件转变为一个实体类进行接收,这个时候问题就来了,我们如何定义girl这个属性呢,我们之前说过,配置文件与实体类的映射是根据属性名一致来相互对应的,可是我们无法命名一个属性为girl.name啊。我想聪明的你应该已经想到了,是的,我们再建立一个实体类Girl来接收girl的参数,其中的属性也是与girl下的参数一一对应。

public class Girl {private String name;private String age;//get set 方法...
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
@Component
@ConfigurationProperties(value = "zzp2")
public class Zzp2Properties {private String name;private String height;private String weight;private Integer age;private Girl girl;@Overridepublic String toString() {return "Zzp2Properties{" +"name='" + name + '\'' +", height='" + height + '\'' +", weight='" + weight + '\'' +", age=" + age +", girl=" + girl +'}';}//get set方法...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

之后我们再在controller中测试一下

@Autowired
private Zzp2Properties zzp2Properties;@RequestMapping(value = "/getZzpGirlInfo2",method = RequestMethod.GET)public Zzp2Properties getZzpGirlInfo2(){return zzp2Properties;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

可以发现,girl的参数已经被注入进来,可以正常获得了,这里要特别说明的是在ZzpProperties中的属性Girl命名一定是girl,必须要与配置文件中的保持一致。 

static静态属性

在一般开发中,我们经常会做静态属性或是静态块的方法来给我们的config使用,比如我使用jedis时,config中就是使用静态块来创建链接,那在YML中能否将配置信息读进static中呢?很可惜,答案是否定的。 
我们首先在application.yml中增加zzp3的配置信息。

zzp3:name: 北坡卡卡age: 10height: 105cmweight: 30kg
  • 1
  • 2
  • 3
  • 4
  • 5

然后在controller中通过设置静态属性来获取配置信息。

@Value("${zzp3.name}")
private static String name3;@Value("${zzp3.age}")
private static Integer age3;@Value("${zzp3.height}")
private static String height3;@RequestMapping(value = "/getZzp3Info",method = RequestMethod.GET)
public String getZzp3Info(){return "zzp3.name:" + name3 + "\n" + "zzp3.age:" + age3 + "\n" + "zzp3.name:" + name3;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

通过POSTMAN的测试,我们发想,属性值都是null,无法得到配置文件参数。 

那是不是我们就无法使用static来获取配置信息来呢?其实并不然,我们可以使用static属性的set方法来获取,我们添加三个参数的set方法,并吧set方法中的static给去掉,同时吧直接@Value置于set方法上。

private static String name3;private static Integer age3;private static String height3;@Value("${zzp3.name}")
public void setName3(String name3) {Round2Controller.name3 = name3;
}@Value("${zzp3.age}")
public void setAge3(Integer age3) {Round2Controller.age3 = age3;
}@Value("${zzp3.height}")
public void setHeight3(String height3) {Round2Controller.height3 = height3;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

我们仍旧通过POSTMAN来访问看下结果,我们发现已经可以获取到值了。 

开发环境切换

上次我们说到切换开发环境,但并没有演示,我们这次来试一下,创建application-dev.yml其中将zzp3的配置信息更换下,然后在application.yml中指定使用dev的参数给项目使用。

#application-dev.yml
zzp3:name: 西莫纳纳age: 99height: 95cmweight: 90kg
#application.yml
spring:profiles:active: dev
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

我们通过POSTMAN可以发现,zzp3的信息已经是使用的dev的参数了。 

通常我们在开发中,重复的配置信息不会重复写,也就是说在application.yml定义好的配置信息就不要在application-dev.yml再定义一次,我们只需要指定使用哪个环境的配置文件即可。因为重复的进行配置会有许多意想不到的问题,比如之前我在使用xml进行mybatis的sql配置,但是每次访问数据库都会有‘没有绑定的sql语句错误’。之后我们在聊mybatis连接数据库时我们再详细的说下这个问题。 
今天就先写到这吧~~~

所有的代码我已经上传到GitHub

round1-springboot

如果心急的小伙伴也可以去clone我已经完成的项目,这个项目中把一些常用功能都写了,并且都写注释啦!!!

MySpringBoot

SpringBoot开发详解(三)--SpringBoot配置文件YML注意事项相关推荐

  1. Android WebView 开发详解(三)

    转载请注明出处   http://blog.csdn.net/typename/article/details/40302351 powered by miechal zhao 概览 Android ...

  2. spring-boot注解详解(三)

    1.SpringBoot/spring @SpringBootApplication: 包含@Configuration.@EnableAutoConfiguration.@ComponentScan ...

  3. 数字音频总线A2B开发详解三(A2B系统的Flash Program详解)

    作者的话 第二个文档我们讲了如何配置A2B,进行实时的调试,那么实时的调试不是最终目的,程序在线运行也不是我们系统的最后结果.调试完成后,总是要回归到脱机运行,A2B应该怎么去实现脱机运行,有两种办法 ...

  4. 移动端的开发详解与1px边框等注意事项

    移动端开发 我们现在关注的点还在移动M站上,或者我们可以叫做webapp,其实就是运行在移动端浏览器中的web网站. app:application应用程序. 手机软件:主要指安装在智能手机上的软件, ...

  5. EasyPR中文开源车牌识别系统 开发详解

     在上篇文档中作者已经简单的介绍了EasyPR,现在在本文档中详细的介绍EasyPR的开发过程. 正如淘宝诞生于一个购买来的LAMP系统,EasyPR也有它诞生的原型,起源于CSDN的taotao ...

  6. android开发照相机啊,Android照相机开发详解(一)

    Android相机开发详解(一) Android相机开发详解(一) 请支持原创,尊重原创,转载请注明出处:http://blog.csdn.net/kangweijian(来自kangweijian的 ...

  7. Android网页浏览器开发详解(一)

    Android网页浏览器开发详解(一) 请支持原创,尊重原创,转载请注明出处:http://blog.csdn.net/kangweijian(来自kangweijian的csdn博客) Androi ...

  8. java框架魔乐_16 魔乐科技 SpringBoot框架开发详解

    资源内容: 16 魔乐科技 SpringBoot框架开发详解|____springboot开发代码.rar|____第一章:SpringBoot入门          |____2. SpringBo ...

  9. SpringBoot配置详解

    SpringBoot配置详解 本文链接:http://blog.battcn.com/2018/04/22/springboot/v2-config-properties/ 上一篇介绍了SpringB ...

最新文章

  1. 命令行参数tail c语言,osg学习笔记2, 命令行参数解析器ArgumentParser
  2. CENTOS手动安装修复python ,YUM CENTOS手动安装修复YUM
  3. ASP.Net服务性能优化原则
  4. java util map,我应该如何命名java.util.Map?
  5. SpringBoot之注解
  6. 卸下重负,苏宁易购重组价值逻辑
  7. 渗透测试技术----工具使用(二)--Nessus工具下载及使用(安装在Kali上)
  8. dataframe画图
  9. 黑马程序员—一张帖看完黑马所有学科、班级就业薪资贴
  10. 用 m3u8 下载网页视频直接保存为 MP4
  11. php 字符串放到数组中,在PHP中将字符串转换为数组(Converting string into array in php)...
  12. Oracle 分析函数(Analytic Functions) 说明
  13. mac lion 系统安装
  14. WIN10 VS2013 GTX960M NVIDIA显卡驱动和CUDA7.5安装 配置Caffe
  15. 猿(媛)来你也在这里!!
  16. 函数柯里化的作用一:参数复用(正则匹配案例)
  17. 在Grails 2.3.X中使用sass脚本
  18. 学习Linux命令(3)
  19. 蔡高厅高等数学15-两个重要极限
  20. java bigdecimal c_Java BigDecimal

热门文章

  1. UWB隧道人员定位技术-隧道定位监测系统-工地人员定位-新导智能
  2. # SOM-算法原理
  3. 苹果Mac软件下载站点及论坛推荐
  4. 平衡家庭和事业,如何用RPA化解职场女性的痛
  5. 更改 IE 收藏夹 位置
  6. rstudio 导出结果_R语言数据导入与导出
  7. 【istioctl】multicluster mesh 管理源码走读
  8. java excel 注解_Java中注解学习系列教程-5 excel导出优化初级阶段
  9. 全球变暖迫在眉睫碳中和势在必行 碳森羿建议提前布局
  10. 英雄之刃显示服务器断开怎么办,英魂之刃手游新手常见问题