1) 在springboot官方文档中"24.ExternalizedConfiguration" chapter中列出了spring Boot场景下如何使配置外部化的手段:
结合上文, 可以得知:开发人员可以通过Properties文件,YAML文件,环境变量或者命令行参数实现外部配置来源; 并且能在spring boot场景中提供三种用途:
(1) Bean的@Value注入;
(2) Spring Environment读取;
(3) @ConfigurationProperties绑定到结构化对象.
2)"外部化配置"属性能被消费,必有它的产生来源. SpringBoot官方文档继续说明:
从字面意思理解,PropertySource为属性源,从而暗示开发人员它是"外部化配置"属性的生产源,并且Spring Boot规定了这17种内建PropertySource顺序.
而application.properties也是PropertySource的一种.
于是, Spring Boot官方文档给出如下示例,解释了他们之间的联系:
import org.springframework.stereotype.*;
import org.springframework.beans.factory.annotation.*;
@Component
public class MyBean {
@Value("${name}")
private String name;
// ...
}
由以上内容,名为name的配置属性在application.properties中为默认值. 当应用运行在新的环境中时,可以通过命令行(command line) 的方式覆盖该默认值, 被@Value("${name}")注入的字段name的内容也随之变化.由于命令行的配置优先级大于内置application.properties文件的配置文件的,从而达到覆盖的目的.