1.SpringBoot的全局配置名固定为*application.properties或*application.yml,更推荐使用yml的方式。
2.YAML语法:
1.k:(空格)v 表示一堆键值对(空格必须有)
2.以空格缩进来控制层级关系,只要左对齐的数据都认为是在一个层级
3.属性和值大小写敏感
YAML值写法:
“”:双引号,不会转义字符串里的特殊字符,比如" a b"输出为"a空格 b",单引号则会转义,所以会保持原语义
对象、Map通过键值对表示,也支持行内写法 a:{k1: v1,k2: v2}
List支持 -(空格)值 的语法,也支持行内写法 a:[v1,v2,v3]
3.通过容器引入@ConfigurationProperties(prefix = "a")的标签,可以把以a为前缀的属性全部自动引入。
4.通过引入spring-boot-configuration-processor的依赖包,可以让写配置时@ConfigurationProperties标签的属性自动提示。
@Value也可以引入值,对比如下:
配置输入值可以结合@Validated做校验
5.通过@ImportResource可以引入Spring配置文件,通过@PropertySource可以加载指定的配置文件,@Bean也可以达到加载组件的效果。也就是说,加载配置中属性,相较于之前@Value、@ConfigurationProperties,还可以使用@PropertySource;加载组件,出了老方式通过配置文件配,再@ImportResource引入,更推荐用@Bean引入的方式。(因为Spring-Boot的理念之一就是要简化配置)
6.配置支持部分特殊写法,类似于${random.value}这种(个人猜测是SpEL语法)
7.可以通过Profile结合properties做多环境配置管控,通过spring.profile.active语法标注激活环境。YAML更有强大的 --- 作为文档块分隔符来配合使用。
8.配置文件加载位置和优先级从高到底为:
-file:/config/
-file:/
-classpath:/config/
-classpath:/
(这里也就是我们可以通过外部环境配置来覆盖自带环境配置的原理,或者说提供默认配置及可被覆盖)
9.外部配置加载顺序优先级从高到低:
命令行参数
来自java:comp/env的JNDI属性
Java系统属性
操作系统环境变量
RandomValuePropertySource配置的random.*属性值
jar包外部的application-{profile}.properties或yml
jar包内部的application-{profile}.properties或yml
jar包外部的application.properties或yml
jar包内部的application.properties或yml
10.自动配置原理
通过@EnableAutoConfiguration开启,开启后会去读spring.facteries里面所有的EnableAutoConfiguration类,加入容器环境后会根据标签条件去执行对应的自动配置实现
相关的标签,@Conditional派生注解