知识卡片
属性来源的优先级链条
内容
同一个配置项可能同时在命令行参数、JVM 系统属性、操作系统环境变量、打包内外的 profile 专属文件、通用属性文件里都有定义,Spring 按固定优先级只认最高优先级来源的那个值:命令行参数 > JVM 系统属性 > 环境变量 > 配置文件(外部先于内部、profile 专属先于通用)。好处是调用方完全不用关心某个属性到底是从哪里来的,统一通过 Environment 接口取值,取到的永远是优先级最高的那一份。发散:这套优先级设计的实用价值在于给”临时覆盖”开了一个安全通道——想在不改任何文件的情况下临时改一个值做实验,直接扔个命令行参数进去就行,改完不留痕迹,比改配置文件再改回来靠谱。
参考来源
《Cloud Native Spring in Action》第4章《Externalized configuration management》