SpringBoot配置文件YML 注意事项
YML读取注意事项
使用YML时遇到的坑:
最近在做项目时,遇到了一些在读取YML配置时发生的问题,在这里写一并写下来,希望给自己以及大家一个提示,能尽量避免在读取配置文件时发生这些错误,给开发带来不必要的多余时间去处理。
多重层级读取
在YML中我们再添加一个ZZP2的配置信息,其中包含了girl节点以及girl下的name,age属性。
zzp2:
name: 西科啦啦
age: 30
height: 175cm
weight: 760kg
long: 10cm
girl:
name: Marry.Jean
age: 18
和之前一样,我们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;
}
接下来我们通过POSTMAN来访问下,可以看到使用注解@Value没有问题,都可以渠道属性值。
接下来我们按照之前的思路建立一个Zzp2properties来将配置文件转变为一个实体类进行接收,这个时候问题就来了,我们如何定义girl这个属性呢,我们之前说过,配置文件与实体类的映射是根据属性名一致来相互对应的,可是我们无法命名一个属性为girl.name啊。我想聪明的你应该已经想到了,是的,我们再建立一个实体类Girl来接收girl的参数,其中的属性也是与girl下的参数一一对应。
public class Girl {
private String name;
private String age;
//get set 方法...
}
@Component
@ConfigurationProperties(value = "zzp2")
public class Zzp2Properties {
private String name;
private String height;
private String weight;
private Integer age;
private Girl girl;
@Override
public String toString() {
return "Zzp2Properties{" +
"name='" + name + '\'' +
", height='" + height + '\'' +
", weight='" + weight + '\'' +
", age=" + age +
", girl=" + girl +
'}';
}
//get set方法...
之后我们再在controller中测试一下
@Autowired
private Zzp2Properties zzp2Properties;
@RequestMapping(value = "/getZzpGirlInfo2",method = RequestMethod.GET)
public Zzp2Properties getZzpGirlInfo2(){
return zzp2Properties;
}
可以发现,girl的参数已经被注入进来,可以正常获得了,这里要特别说明的是在ZzpProperties中的属性Girl命名一定是girl,必须要与配置文件中的保持一致。
static静态属性
在一般开发中,我们经常会做静态属性或是静态块的方法来给我们的config使用,比如我使用jedis时,config中就是使用静态块来创建链接,那在YML中能否将配置信息读进static中呢?很可惜,答案是否定的。
我们首先在application.yml中增加zzp3的配置信息。
zzp3:
name: 北坡卡卡
age: 10
height: 105cm
weight: 30kg
然后在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;
}
通过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;
}
我们仍旧通过POSTMAN来访问看下结果,我们发现已经可以获取到值了。
开发环境切换
上次我们说到切换开发环境,但并没有演示,我们这次来试一下,创建application-dev.yml其中将zzp3的配置信息更换下,然后在application.yml中指定使用dev的参数给项目使用。
#application-dev.yml
zzp3:
name: 西莫纳纳
age: 99
height: 95cm
weight: 90kg
#application.yml
spring:
profiles:
active: dev
我们通过POSTMAN可以发现,zzp3的信息已经是使用的dev的参数了。
SpringBoot配置文件YML 注意事项的更多相关文章
- SpringBoot学习笔记(八):SpringBoot启动端口+访问路、SpringBoot配置文件yml、SpringBoot多环境区分、SpringBoot打包发布
SpringBoot启动端口+访问路径 配置文件: server.port=9090 server.context-path=/springboot 现在只能用http://127.0.0.1:909 ...
- SpringBoot 配置文件 YML/Profile
1. 全局配置文件 application.properties application.yml 配置文件名是固定的; 配置文件存放在src/main/resources目录或者类路径/config下 ...
- SpringBoot配置文件yml ScannerException: while scanning an alias *
在使用yml编写配置我呢见 management: endpoints: web: base-path: /actuator jmx: exposure: include: * 报了如下错误 解决方案 ...
- springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务
springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...
- springboot配置文件之yml的语法学习
springboot配置文件(.yml/.yaml.properties) YAML(YAML Ain't Markup Language) YAML A Markup Language:是一个标记语 ...
- 解决spring-boot配置文件使用加密方式保存敏感数据启动报错No decryption for FailsafeTextEncryptor. Did you configure the keystore correctly
spring-boot配置文件使用加密方式保存敏感数据 application.yml spring: datasource: username: dbuser password: '{cipher} ...
- SpringBoot 配置文件存放位置及读取顺序
SpringBoot配置文件可以使用yml格式和properties格式 分别的默认命名为:application.yml.application.properties 存放目录 SpringBoot ...
- [SpringBoot] - 配置文件的多种形式及JSR303数据校验
Springboot配置文件: application.yml application.properties(自带) yml的格式写起来稍微舒服一点 在application.properties ...
- 3springboot:springboot配置文件(配置文件、YAML、属性文件值注入<@Value、@ConfigurationProperties、@PropertySource,@ImportResource、@Bean>)
1.配置文件: springboot默认使用一个全局配置文件 配置文件名是固定的 配置文件有两种(开头均是application,主要是文件的后缀): ->application.prope ...
随机推荐
- 2017头条笔试题:二维点集中找出右上角没有点的点并按x坐标从小到大打印坐标
PS:这篇是之前本来就想发的但是一直没时间写,加上今天做了京东的题,结果代码名就命名为jingdong了……懒得改代码名重新跑一遍结果了=.= 暴力法去做就是遍历每个点,判断它是不是“最大点”.判断过 ...
- QCheckBox控件
一个QCheckBox会有2种状态:选中和为选中.它由一个选择框和一个label组成,常常用来表示应用的某些特性是启用或不启用. 在下面的例子中,我们创建了一个选择框,它的状态变化会引起窗口标题的变化 ...
- bzoj2242 计算器
Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...
- java对含有中文的字符串进行Unicode编码
public class MyUtil { public static void main(String[] args) throws Exception { String s = "a中a ...
- selenium操作隐藏的元素 (下拉框类型)
有时候我们会碰到一些元素不可见,这个时候selenium就无法对这些元素进行操作了.例如,下面的情况: Python 页面主要通过“display:none”来控制整个下拉框不可见.这个时候如果直接操 ...
- 术语-服务:SaaS
ylbtech-术语-服务:SaaS SaaS是Software-as-a-Service(软件即服务)的简称,随着互联网技术的发展和应用软件的成熟, 在21世纪开始兴起的一种完全创新的软件应用模式. ...
- 尽量少嵌套无用的div;外部文件尽量使用link而不要使用用@import
最近的工作又学到了很多东西,在这里记录一下. 1,尽量少嵌套无用的div,这个问题领导很严肃的跟我提过很多次,因为我很喜欢用很多div,而且有很多div都是无存在意义的.后来领导给了我一些资料,我看了 ...
- Linux 期中架构 rsync
上篇 Rsync rysnc查看版本 --version 全量 与增量在效率上有区别 cp mv scp --全量复制 rsync --增量复制 rsync利用的是quick ch ...
- 华为P10的内存门和闪存门的检测方法
用android的终端模拟器,进入以后进入界面,输入命令ls /proc/fs/*,可以查看是否ufs还是emmc硬盘:用devcheck可以查看到手机的内存是否是DDR3还是DDR4:用androb ...
- 自己写的jQuery拖动滑块
(function ($) { $.fn.bnSlide = function (options) { var defaults = { colorData: 0, //原始滑道的有效值 maxWid ...