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: