springboot学习过程中遇到的小问题

今天学习springboot遇到了一个很有趣的问题

是这样的,在class中定义两个变量,在application.yml中配置它们的value。
访问到的name居然是lenovo,出乎我的意料。神奇的是,当我猜测是变量名冲突时,把name改成了name2,再次访问就能访问到预期值,没有问题。
回过头来想想,虽然我的笔记本电脑是lenovo,但是我全程没有输入“lenovo”,这个lenovo是怎么来的,细思极恐,是我学识浅薄还是真的存在这样的bug。

img

img

img

img

springboot会将系统环境变量加载进去,不出所料,你的操作系统用户名为lenovo

可能其它引入的依赖也定义了user.name的配置,自定义的user.name可以改下层级,例如my.user.name

通过查看@Value注解注入源码可知,
springboot启动的时候会加载多个环境,信息 形成List集合,
当存在重名属性注入的时候, 根据list集合顺序,决定优先级,
系统属性的配置信息,大于配置文件的,所以会被覆盖,
相关类 PropertySourcesPropertyResolver#getProperty

看下这个,说了属性的加载顺序和覆盖规则

https://docs.spring.io/spring-boot/docs/2.7.2/reference/htmlsingle/#features.external-config