SpringBootSpringBoot配置文件
CAMELLIASpringBoot配置文件
1. 配置文件种类与格式
SpringBoot的配置文件格式主要为application.properties
、application.yml
、 application.yaml
,他们的配置格式如下。
- application.properties
- application.yml
application.yml
、 application.yaml
配置格式相同。
[!Tip] 注意:
- 在
:
后,数据前一定要加空格。
SpringBoot
程序的配置文件名必须是 application
,只是后缀名不同而已。
2. 三种配合文件的优先级
在三种配合文件中分别配置不同的端口号,启动服务查看绑定的端口号。用这种方式就可以看到哪个配置文件的优先级更高一些
application.properties
文件内容如下:
application.yml
文件内容如下:
application.yaml
文件内容如下:
启动服务,在控制台可以看到使用的端口号是 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 2 3 4 5
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
|
- 自定义实体对象
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要对应(相同)。