添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
耍酷的书包  ·  Mysql的max_allowed_pack ...·  2 年前    · 
愉快的夕阳  ·  java - Android :UI ...·  3 年前    · 
首发于 聊聊Java
18张图,详解SpringBoot解析yml全流程

18张图,详解SpringBoot解析yml全流程

原创:微信公众号 码农参上 ,欢迎分享,转载请保留出处。

前几天的时候,项目里有一个需求,需要一个开关控制代码中是否执行一段逻辑,于是理所当然的在 yml 文件中配置了一个属性作为开关,再配合 nacos 就可以随时改变这个值达到我们的目的,yml文件中是这样写的:

switch:
  turnOn: on

程序中的代码也很简单,大致的逻辑就是下面这样,如果取到的开关字段是 on 的话,那么就执行 if 判断中的代码,否则就不执行:

@Value("${switch.turnOn}")
private String on;
@GetMapping("testn")
public void test(){
    if ("on".equals(on)){
        //TODO

但是当代码实际跑起来,有意思的地方来了,我们发现判断中的代码一直不会被执行,直到debug一下,才发现这里的取到的值居然不是 on 而是 true

看到这,是不是感觉有点意思,首先盲猜是在解析yml的过程中把 on 作为一个特殊的值进行了处理,于是我干脆再多测试了几个例子,把yml中的属性扩展到下面这些:

switch: