SpringBoot配置文件

SpringBoot配置文件

1. 配置文件种类与格式

SpringBoot的配置文件格式主要为application.propertiesapplication.yml application.yaml,他们的配置格式如下。

  1. application.properties
1
2
3

server.port=80

  1. application.yml

application.yml application.yaml配置格式相同。

1
2
3
4

server:
port: 81

[!Tip] 注意:

  1. :后,数据前一定要加空格。
  2. SpringBoot 程序的配置文件名必须是 application ,只是后缀名不同而已。

2. 三种配合文件的优先级

在三种配合文件中分别配置不同的端口号,启动服务查看绑定的端口号。用这种方式就可以看到哪个配置文件的优先级更高一些

application.properties 文件内容如下:

1
server.port=80

application.yml 文件内容如下:

1
2
server:
port: 81

application.yaml 文件内容如下:

1
2
server:
port: 82

启动服务,在控制台可以看到使用的端口号是 80。说明 application.properties 的优先级最高。注释掉 application.properties 配置文件内容。再次启动服务,在控制台可以看到使用的端口号是 81,说明 application.yml 配置文件为第二优先级。

application.properties > application.yml > application.yaml

3. yml配置文件数据读取

补充:**数组数据在数据书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔**。

1
2
3
4
5
6
7
8
9
10
11
12
13
project: SpringBoot

server:
port: 80

user:
name: camellia
age: 22
tel: 4006184000
skills:
- Java
- Spring
- Python

对于数组数据,我们要创造一个实体类,然后将数组key映射为实体类的字段。

1
2
3
4
5
6
7
@Date
class User{
String name;
int age;
String tel;
String[] skills;
}

使用 @Value注解读取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@RestController
@RequestMapping("/user")
public class UserController {

@Value("${project}")
private String project;
@Value("${server.port}")
private Integer port;
@Value("${user.subject[0]}")
private String subject0;

@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println(project);
System.out.println(port);
System.out.println(subject0);
return "read success!";
}
}

Environment对象

SpringBoot 还可以使用 @Autowired 注解注入 Environment 对象的方式读取数据。这种方式 SpringBoot 会将配置文件中所有的数据封装到 Environment 对象中,如果需要使用哪个数据只需要通过调用 Environment 对象的 getProperty(String name) 方法获取

Environment 是 Spring 框架中自带的一个接口,用于访问应用程序环境中的属性。Environment 提供了一种统一的方式来访问各种配置属性和环境变量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@RestController
@RequestMapping("/user")
public class UserController {

@Autowired
private Environment env;

@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println(env.getProperty("project"));
System.out.println(user.getProperty("user.name"));
System.out.println(user.getProperty("user.skills[0]"));
return "hello , spring boot!";
}
}

自定义对象

SpringBoot 还提供了将配置文件中的数据封装到我们自定义的实体类对象中的方式。

  1. 首先添加依赖
1
2
3
4
5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
  1. 自定义实体对象
1
2
3
4
5
6
7
8
9
@Component
@ConfigurationProperties(prefix = "user")
@Date
public class User {
String name;
int age;
String tel;
String[] skills;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@RestController
@RequestMapping("/user")
public class UserController {

@Autowired
private User user;

@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println(user.getName());
System.out.println(user.getAge());
System.out.println(user.getTel());
System.out.println(user.getSkills());
System.out.println(user.getSkills()[0]);
return "hello , spring boot!";
}
}

注意:实体类字段和数据的key要对应(相同)。