目录

YML读取注意事项

多重层级读取

static静态属性

开发环境切换


转载于:https://www.cnblogs.com/jtlgb/p/8548782.html

总结:

  • 多层级不是子节点不能添加 value,会出现错误
girl:18      # 错误name: Marry.Jean
  • YML中能否将配置信息读进static中呢?很可惜,答案是否定的。
  • 多重节点转换可以使用对象,集合
  • yml文件支持,不同环境的切换。如 application-dev.yml  application-test.yml

SpringBoot配置文件YML 注意事项

YML读取注意事项

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

多重层级读取

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

zzp2:name: 西科啦啦age: 30height: 175cmweight: 760kglong: 10cmgirl:name: Marry.Jeanage: 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;@Overridepublic 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: 10height: 105cmweight: 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: 99height: 95cmweight: 90kg
#application.yml
spring:profiles:active: dev

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

SpringBoot配置文件yml读取注意问题相关推荐

  1. springboot配置文件yml读取不到。

    数据源配置: appenders present in context [logback] for logger [org.springframework.core.env.PropertySourc ...

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

    SpringBoot开发详解(三)--SpringBoot配置文件YML注意事项 原创 2017年04月16日 20:00:12 11289 YML读取注意事项 使用YML时遇到的坑:  最近在做项目 ...

  3. SpringBoot配置文件yml敏感信息加密

    java项目使用SpringBoot很方便,但SpringBoot的配置文件朋友们都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些.打开application.properties或a ...

  4. SpringBoot 配置文件(yml)

    可以配置参数替换默认值 SpringBoot默认会从Resources目录下加载application.properties或application.yml(application.yaml)文件 s ...

  5. spring-boot自定义yml读取

    通过注解方式加载自定义yml文件 @Component @PropertySource(value = "conf/jgpt.yml")//指定文件位置 @Configuratio ...

  6. springboot取yml中的值_SpringBoot 中从yml配置文件中读取常用的参数值

    SpringBoot现在基本上都是使用application-XXX.yml(生产环境为pro,开发测试环境为dev)来配置项目中的一些配置条件,在springboot中还可以通过从yml文件中将ym ...

  7. Springboot 之 自定义配置文件及读取配置文件

    读取核心配置文件 核心配置文件是指在resources根目录下的application.properties或application.yml配置文件,读取这两个配置文件的方法有两种,都比较简单. 核心 ...

  8. 10分钟搞定 SpringBoot 如何优雅读取配置文件?

    本文以及收录自springboot-guide(不只是SpringBoot还有Spring重要知识点),地址:https://github.com/Snailclimb/springboot-guid ...

  9. redismanager 获取不到yml中的密码_SpringBoot敏感信息加密,springboot配置文件密码加密jasypt...

    使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些.打开application.properties或application.yml,比如mysq ...

最新文章

  1. 如何解决用谷歌浏览器调试代码接口请求的时候,跳转网页切换网页的时候,上一个页面的接口请求记录被清除消失的问题
  2. PLSQL的DBMS_GETLINE
  3. monty python-Monty Python
  4. 设计模式---设计模式的分类及六大原则
  5. HTML 传输 字符转换 进制转换 15位 18位 时间戳 转换
  6. 图解分布式架构的演进过程!
  7. dev调试时无法进入下一步_【问题解决方案】Dev C++ 无法调试的问题与解决
  8. nodejs实践录:pm2实验测试记录
  9. 今日恐慌与贪婪指数为77 贪婪程度有所缓解
  10. cocos2dx之Http网络编程(一)——网络请求的发送和接收
  11. 解决win10可以登录微信/QQ,浏览器无法访问网页的问题
  12. exploit计算机术语,exploit
  13. 服务器内存只能显示4g_为什么安装4G内存显示只有2G或3G可用|Crucial(英睿达)
  14. 焦虑症和抑郁症的区别
  15. persevere的用法_努力奋斗的英文短语 努力的英文意思是
  16. AD2020库安装及查找库
  17. 【编码实战】2022年还在用jjwt操作jwt?,推荐你使用nimbus-jose-jwt,爽到飞起~
  18. 几个比较新的恶意程序……AntiVir全报,kaspersky保持沉默的时候多
  19. Android进阶之路 - 如何携带数据跳转到三方应用、指定页?
  20. echarts 3d地图

热门文章

  1. 刚入职!就遇到上亿(MySQL)大表的优化
  2. java毕业设计家庭理财记账系统(附源码、数据库)
  3. YOLOV3在windwos下的配置和训练过程简述
  4. 高职院校文学鉴赏教学中培养学生的主体性策略
  5. IDEA 中如何完成Git 和SVN 版本控制的切换
  6. 基于生理信号的多模态情绪识别模型
  7. 不知道怎样做自媒体视频剪辑?分享几个必备素材网站
  8. 366. 斐波纳契数列
  9. vue中实现全屏以及对退出全屏的监听
  10. 【蜂鸟E203的FPGA验证】Chap.8 Vivado综合与性能分析-Vivado性能分析