SpringBoot-(一)SpringBoot配置与属性赋值

本文最后更新于:January 30, 2022 pm

SpringBoot框架中有两个非常重要的策略:开箱即用和约定优于配置。其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

目录

创建SpringBoot项目时,默认使用的是properties文件,而官方更加推荐使用yaml文件。这里简单记录一下三种不同文件的区别。

  • properties:key=value
  • yaml:key:空格value
  • xml:标签式。

yaml简单语法

注意:yaml对空格的控制要求十分高!如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1
a:
b:
c:

# 2
a:
b:
c:

# 3
a:
b:
c:

以上三种分别表示不同的形式。用包含关系简单表示分别为:a[b、c];a[b[c]];a,b,c

普通键值对

1
name: loong

对象形式

1
2
3
student:
name:
age:

行内写法:

1
student: {name: aa,age: 2}

数组

1
2
3
4
student:
- one
- two
- th

行内写法:

1
student: [one,two,th]

属性赋值

现在有一个类:entity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.tothefor;

public class entity {
private String name;
private int age;

@Override
public String toString() {
return "entity{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}

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;
}

public entity(String name, int age) {
this.name = name;
this.age = age;
}

public entity() {
}
}

application.yaml

1
2
3
person:
name: loong
age: 23

然后添加注解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.tothefor;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "person") //person为application中的
public class entity {
private String name;
private int age;

@Override
public String toString() {
return "entity{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}

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;
}

public entity(String name, int age) {
this.name = name;
this.age = age;
}

public entity() {
}
}

在写注解@ConfigurationProperties时,IDEA会报一个错(其实也不是错,不用管也可以运行,但头部显示红色不舒服。。。)。解决办法:加入一个依赖。

1
2
3
4
5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

注解@ConfigurationProperties后的prefix的值是application.yaml中的名称,表示将本类中的所有属性和配置文件中的相关配置进行绑定。会自动去找同名的属性,没有找到了则为null。

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.tothefor;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringBoot01ApplicationTests {

@Autowired
private entity e ;

@Test
void contextLoads() {
System.out.println(e);
}

}

最后的输出结果会将配置文件中给的值输出。如:

1
entity{name='loong', age=23}

默认值

当一个属性没有赋值时,应该使用默认值。

1
2
3
person:
name: ${person.re:loong}_墨水记忆
age: 23

name: ${person.re:loong}_墨水记忆 表示:找配置文件中person下的re是否有值,如果没有则使用后面的值;有则使用person.re的值。

测试代码同上。

当添加了对应值后:

1
2
3
4
person:
name: ${person.re:loong}_墨水记忆
age: 23
re: tothefor

两次可分别看见区别。

松散绑定

即:如果类中的一个属性名称为:firstName。(驼峰命名)

配置文件中有一个first-name的key,那么,first-name的值就是firstName的值。

即:yml中的first-name就是和类中的firstName一样的。横杠(-)后面跟着的字母默认是大写的。