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 ...
随机推荐
- go的module用法
新版不需要项目放在GOPATH里面了,这个恶心的机制之前还被n多人捧臭脚.简单列一下用法 新建项目 cd 项目目录go mod init 项目名 写好代码 go build 或者 go mod tid ...
- jackson快速实现对象与json之间的转换
Maven依赖: <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <arti ...
- 什么是DSCP,如何使用DSCP标记搭配ROS策略
一.什么是DSCP DSCP:差分服务代码点(Differentiated Services Code Point),IETF于1998年12月发布了Diff-Serv(Differentiated ...
- Win10巧用自带输入法轻松打出特殊字符
给电脑输入信息时,如果要用上键盘上没有的特殊符号,那就为难了.其实,在Win10中,自带的微软拼音就能让你轻松输入键盘上没有的符号.下面来看看Win10如何输入特殊符号. 微软拼音不但中文输入智能化做 ...
- Web 项目遇到的乱码问题
问题代码: jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pa ...
- 【Linux_Unix系统编程】chapter6 进程
chapter6 进程 重点关注进程虚拟内存的布局及内容.6.1 进程和程序 进程(process)是一个可执行程序(program)的实例. 程序是包含了一系列信息的文件,这些信息描述了如何在运行时 ...
- IDEA编译Flume Sink通不过解决方法
Build/Rebuild Project之后
- php while循环控制实例讲解
while循环是PHP中最简单的循环,其基本格式为: while (expr){ statement } 或者 while (expr): statement endwhile; 该语法表示,只要ex ...
- CUDA C Programming Guide 在线教程学习笔记 Part 11
▶ 数学函数 ● 舍入函数,考虑被舍入参数有双精度浮点和单精度浮点,舍入方式有区别,舍入结果有整形.长整形和长长整形,所以共有以下舍入函数. // math_functions.h extern __ ...
- Hive 简介
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 其优点是学习成本低,可以通过 ...