文章目录
-
- 一、配置文件的格式
- [二、properties 配置文件](#二、properties 配置文件)
-
- [2.1 读取配置文件](#2.1 读取配置文件)
- [2.2 properties 缺点](#2.2 properties 缺点)
- [三、yml 配置文件](#三、yml 配置文件)
-
- [3.1 yml 基本语法](#3.1 yml 基本语法)
- [3.2 配置不同数据类型及 null](#3.2 配置不同数据类型及 null)
- [3.3 读取配置](#3.3 读取配置)
- [3.4 配置对象](#3.4 配置对象)
- [3.5 配置集合](#3.5 配置集合)
- [3.6 配置Map](#3.6 配置Map)
- [3.7 yml 优缺点](#3.7 yml 优缺点)
在 Spring Boot 开发中,配置文件是连接 "代码逻辑" 与 "环境参数" 的核心纽带 ------ 小到数据库地址、端口号,大到对象属性、集合参数,几乎所有动态信息都要靠它来管理。
一、配置文件的格式
Spring Boot 支持并定义了配置文件的格式,也在另一个层面达到了规范其他框架集成到SpringBoot的目的。很多项目或者框架的配置信息也放在配置文件中。
Spring Boot 配置文件有以下三种:
- application.properties
- application.yml
- application.yaml
yml 是 yaml 的简写,使用方式是一样的。实际开发中使用最多的是 1 和 2 .
当应用程序启动时,Spring Boot 会自动从 classpath 路径找到并加载 application.properties ,application.yml ,application.yaml 文件。
二、properties 配置文件
properties 是创建SpringBoot 项目默认的文件。是以键值的形式配置的,key 和 value 之间是以 " = " 连接的,示例:
java
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?
spring.datasource.username=root
spring.datasource.password=root
2.1 读取配置文件
在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解实现,@Value 注解使用 " ${ } " 的格式读取,示例:
java
/**
* 读取配置项mykey
*/
@RestController
@RequestMapping("/prop")
public class ReadPropertiesController {
@Value("${my.key}")
private String mykey;
@Value("${server.port}")
private Integer serverPort;
@RequestMapping("/read")
public String read(){
return "mykey: " + mykey;
}
@PostConstruct //初始化,在项目创建启动完成之前执行这个方法
public void read2(){
System.out.println("server.port: " + serverPort);
}
}
可以得到自定义配置项mykey的值以及端口号。@PostConstruct ,这个注解可以使得在项目创建启动之前执行当前方法。,便于查看获取配置项值。

通过 @Value 注解获取到默认配置端口号:8080。
2.2 properties 缺点
properties 配置是以key-value形式配置的。可以看出配置中有很多的冗余信息:

可以使用 yml 配置文件的格式化。
三、yml 配置文件
3.1 yml 基本语法
yml 是树形结构的配置文件,基础语法是" key: value ";key 与 value 之间使用英文冒号加空格的方式组成,该空格不可以省略。示例:
java
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/testdb?
username: root
password: root
3.2 配置不同数据类型及 null
| 数据类型 | 键名 | 值 | 说明 |
|---|---|---|---|
| 字符串 | string.value | Hello | 直接写字符串内容 |
| 布尔值 | boolean.value | true / false | 取值为true或false |
| 整数 | int.value | 10 | 整数数字格式 |
| 浮点数 | float.value | 3.14159 | 带小数的数字格式 |
| Null | null.value | ~ | YAML中用~表示null |
| 空字符串 | empty.value | ' ' | 用引号包裹表示空字符串 |
示例:
java
# 字符串类型
string:
value: Hello
value2: Hello YAML # 带空格的字符串无需引号也可识别
# 布尔类型
boolean:
value: true
value1: false
# 整数类型
int:
value: 10
value2: -20 # 补充:负整数写法
# 浮点数/小数类型
float:
value: 3.14159
value2: -9.8 # 补充:负浮点数写法
# null 空值类型
null:
value: ~
# 空值相关区分
empty:
value: '' # 空字符串
value1: # 无值,效果等价于空字符串
3.3 读取配置
yml 读取配置的方式和 properties 相同,使用 @Value 注解,使用方式相同。示例同上。
value 值加单双引号区别:
字符串默认不用加单引号或双引号,但是加单双引号可表示不同的含义:
- 单引号会转义特殊字符,使其失去特殊功能,始终是⼀个普通的字符串。
- 双引号不会转义字符串里面的特殊字符,特殊字符会表示本身的含义。
3.4 配置对象
可以在 yml 中配置对象,示例:
java
userinfo:
name: zhangsan
age: 20
这时不能用 @Value 来读取配置对象,而是使用 注解 @ConfigurationProperties 来读取,示例:
java
@Data
@Configuration
@ConfigurationProperties(prefix = "userinfo")
public class UserInfo {
private String name;
private int age;
}
java
@RestController
@RequestMapping("/yml")
public class ReadYmlController {
@Autowired
private UserInfo userInfo;
@PostConstruct
private void read(){
System.out.println(userInfo);
}
}
获取到配置对象:

3.5 配置集合
配置文件也可以配置list集合
示例:
java
# 配置集合
dbtypes:
name:
- mysql
- sqlserver
- db2
集合读取和对象一样,也是使用 @ConfigurationProperties注解。
java
@Data
@Configuration
@ConfigurationProperties(prefix = "dbtypes")
public class DataType {
private List<String> name;
}
java
@RestController
@RequestMapping("/yml")
public class ReadYmlController {
@Autowired
private DataType dataType;
@PostConstruct
private void read(){
System.out.println("dbtypes: " + dataType);
}
}
获取到集合:

3.6 配置Map
配置文件也可以配置 map ,如下:
java
# 配置map
maptypes:
map:
k1: v1
k2: v2
k3: v3
Map 的读取和 对象一样 使用 @ConfigurationProperties 注解获取,如下:
java
@Data
@Configuration
@ConfigurationProperties(prefix = "maptypes")
public class DataType {
private Map<String,String> map;
}
java
@RestController
public class ReadYmlController {
@Autowired
private DataType dataType;
@PostConstruct
private void read(){
System.out.println("dbtypes: " + dataType);
}
}
获取到Map:

3.7 yml 优缺点
优点:
- 特定条件下可读性高,易于理解。
- 支持更多的数据类型,可以简单表达对象,数组,集合,Map等等。
- 支持更多的编程语言,不止是在Java 中可以使用。
缺点:
- 不适合写复杂的配置文件,例如多层嵌套
- 对格式有较强的要求(少写一个空格会发生大错误)