SpringBoot配置文件
一、配置文件加载优先级
- bootstrap配置文件优先于application
- 当优先级高的配置文件与优先级低的配置项发生冲突,优先加载优先级高的,若没有冲突,一同加载进去。
二、YAML语法格式
1、YAML基本语法
- key: value 表示一对键值对(冒号后面必须要有空格)
- 使用空格缩进表示层级关系
- 左侧缩进的空格数目不重要,只要同一层级的元素左侧对齐即可
- key 与 value 大小写敏感
server: port: 8081 contextPath: /info
2、YAML常用数据表示方法
-
2.1 数值,字符串,布尔,日期
- 双引号 " " :
-
使用 双引号 不会转义特殊字符,特殊字符最终会转成本来想表示含义输出
name: "mengxuegu \n jiaoyu" 输出: mengxuegu 换行 jiaoyu
-
- 单引号 ' ' :
-
使用 单引号 会转义特殊字符,特殊字符当作一个普通的字符串输出
name: 'mengxuegu \n jiaoyu 输出: mengxuegu \n jiaoyu
-
- 双引号 " " :
-
2.2 对象 & Map
- key: value:
-
emp: lastName: xiaomeng age: 22 salary: 10000
-
- 行内写法 :
-
emp: {lastName: xiaomeng, age: 1 22, salary: 10000}
-
- key: value:
-
2.3 数组(List、Set)
- 用 - 值表示数组中的一个元素
-
fortes: - java - python - hadoop
-
- 行内写法
-
fortes: [java, python, hadoop]
-
- 用 - 值表示数组中的一个元素
三、yaml 配置文件注入值
1、@value 与 @ConfigurationProperties 区别
application.yml 配置文件
emp:
lastName: zhangsan
age: 28
salary: 20000
boss: true
birthday: 1991/10/10
map:
key1: value1
key2: value2
list:
- one
- two
- three
forte:
name: java
time: 8
2、@ConfigurationProperties
JavaBean方式
/** * 1、@ConfigurationProperties 告诉SpringBoot将配置文件中对应属性的值,映射到这个组件类中,进行一一绑定 * prefix = "emp":配置文件中的前缀名,哪个前缀与下面的所有属性进行一一映射 * 2、@Component 必须将当前组件作为SpringBoot中的一个组件,才能使用容器提供的@ConfigurationProperties功能; */ @Component @Data @ConfigurationProperties(prefix = "emp") public class Emp { private String lastName; private Integer age; private Double salary; private Boolean boss; private Date birthday; private Map map; private List list; //特长 private Forte forte;
//特长类 @Data public class Forte { private String name; private Integer time; }
配置自定义bean方式
@Configuration public class PropertiesConfig { @Bean @ConfigurationProperties(prefix = "emp") public Emp(){ return new Emp(); } }
3、@Value
@Component public class Emp { /** * 类似于 Spring 中的 xml 配制文件中的数据注入方式: * <bean class="Emp"> * <property name="lastName" value="字面量/ #{SpEL}Spring表达式/ ${key}从 配制文件取值"> * </property> * </bean> */ @Value("${emp.last-name}") private String lastName; @Value("#{10*2}") private Integer age; @Value("8000") private Double salary; private Boolean boss; private Date birthday; private Map map; private List list; //特长 private Forte forte;