开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情
SpringBoot配置
YAML
基础
对比
- properties:
server.port=8000
server.address=127.0.0.1
- xml:
<server>
<port>8080</port>
<address>127.0.0.1</address>
</server>
- yml:
server:
port: 8080
address: 127.0.0.1
可以看出,xml对比properties是层级分明,yml的优势是简洁,以数据为核心。
注意:1)冒号后面要带一个空格,否则数据不会被识别到(有数据的地方必须有空格,没有数据的,比如server后面就无所谓了);2)另外yml使用缩进表示层级关系,缩进时不允许使用Tab键,只能用空格,因为不同操作系统对Tab对应的空格数目可能不同,会导致层次混乱,但是我们使用idea的话就不必担心这个问题了;3)缩进的空格数目并不重要,只要相同层级的元素左对齐了,那么他们就是同一层级的元素。
数据格式
- 对象(map):键值对的集合
person:
name: jinzunyue
# 行内写法
person: {name: jinzunyue}
注意:“person:”后面要加空格,“name:”后面也需要加空格。
- 数组:一组按照次序排列的值
address:
- jin
- zun
# 行内写法
address: [jin,zun]
- 纯量:单个的,不可分割的值
s1: 'hello \n world'
s2: "hello \n world"
注意:单引号忽略转义字符,双引号识别转义字符,也就是说,前者输出hello \n world,后者则换行。
参数引用
name: jinzunyue
person:
name: ${name}
引用上面已经定义过的name的值
读取配置文件内容
方法一:@Value()
方法二:Environment注入
首先使用@Autowired注解在springboot程序运行时将Enviroment对象加载到spring容器中,然后就可以直接注入了。相对于@Value方法,该方法的优势在于只需要注入一次,后面只需要调用方法提取配置文件中的值即可,而@Value提取每个值都需要写一遍@Value();当然,在值比较少的情况下还是推荐使用@Value,就不用再调用方法了。
方法三:@ConfigurationProperties
- 如果不添加前缀,那么不会识别到person下面的name和age。
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private int age;
private String[] address;
public String[] getAddress() {
return address;
}
public void setAddress(String[] address) {
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + ''' +
", age=" + age +
'}';
}
}
- 添加前缀后再进行输出就可以了。
1)@Component注解意思是,Person被spring识别为一个bean;2)@Autowired相当于创建了一个Person对象;
tips:如何解决红色的辐条
跟随指引,点击文档,将依赖添加进pom文档中,加入这个依赖后再次编写配置文件就会有提示了,没错,这个依赖就只起到提示作用。