SpringBoot配置文件详解
文章目录
一、SpringBoot配置文件分类
SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。
- 默认配置文件名称:application.properties
- 在同一级目录下优先级为:properties>yml > yaml
例如:配置内置Tomcat的端口
properties:
server.port=8081
yml:
server:
port:8081
二、SpringBoot配置-yaml(yml)基本语法
1.概念
YAML(YML)是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入。
2.语法特点
• 大小写敏感
• 数据值前边必须有空格,作为分隔符
• 使用缩进表示层级关系
• 缩进时不允许使用Tab键,只允许使用空格(各个系统 Tab对应的空格数目可能不同,导致层次混乱)。
• 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
• ‘’#" 表示注释,从这个字符一直到行尾,都会被解析器忽略。
代码如下(示例):
server:
port: 8081
address:
name: lp
msg1: 'hello \n world' #单引忽略转义字符
msg2: "hello \n world" #双引识别转义字符
三.SpringBoot配置-yaml数据格式
对象(map):
键值对的集合。
person:
name: lp
# 行内写法
person:{name: lp}
纯量:
单个的、不可再分的值
msg2: "hello \n world" #双引识别转义字符
数组:一组按次序排列的值
address:
- beijing
- shanghai
# 行内写法
address: [beijing,shanghai]
四.SpringBoot配置-获取配置文件中的数据
1.使用@Value
注解 常用
@Value("${name}")
private String name;
2.Evironment
@Autowired
private Environment env;
System.out.println(env.getProperty("person.name"));
3. @ConfigurationProperties
注意:prefix
一定要写
@Component
@ConfigurationProperties(prefix ="person")
public class Person{
privateString name;
privateint age;
private String[] address;
public Stringget Name(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public String[] getAddress(){
return address;
}
public void setAddress(String[] address){
this.address = address;
}
@Override
public String toString(){
return"Person{"+"name='"+ name +'\''+", age="+ age +'}';
}}
修改controller
@Autowired
private Person person;
System.out.println(person);
String[] address = person.getAddress();
for(String s : address){System.out.println(s);}
使用第三个获取数据时,会有警告,去掉报警提示:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
五.SpringBoot配置-项目内部配置文件加载顺序
加载顺序为下文的排列顺序,高优先级配置的属性会生效
• file:./config/:当前项目下的/config目录下
• file:./ :当前项目的根目录
• classpath:/config/:classpath的/config目录
• classpath:/ :classpath的根目录