SpringBoot中Properties和YAML两大配置文件详解
一、配置文件是什么?为什么需要配置文件?
1 什么是硬编码?
先看一个例子:
假设我们现在需要编写一个 Java 程序,规定用户访问服务器时使用的端口号为 8080。
我们可能会直接在代码中写:
public class Server {
public void start() {
int port = 8080;
System.out.println("服务器启动,端口号:" + port);
}
}这里的 8080 就直接写在了程序代码里面。
如果以后我们想把端口号修改为 9090,就必须修改 Java 代码,然后重新编译、打包、部署。
这种将数据直接写在程序代码中的方式,就叫作硬编码。
硬编码:
- 数据直接写在程序源代码中。
- 修改数据通常需要修改代码。
- 程序的配置和业务逻辑混在一起。
- 不方便统一管理。
2 为什么需要配置文件?
现在我们换一种方式。
不再将端口号直接写在 Java 代码中,而是把它放在配置文件里面。
例如:server.port=8080
Java 程序启动时,读取配置文件中的端口号。
如果以后需要修改端口,只需要修改配置文件:server.port=9090
Java 业务代码不需要修改。
这就是配置文件的核心作用:
将程序中可能发生变化的信息,从程序代码中独立出来,统一放在配置文件中进行管理
3 Spring Boot 中有哪些信息需要配置?
在实际 Java 后端项目中,有很多信息不适合直接写死在 Java 代码中。
例如:
① 项目启动端口
Spring Boot 内置了 Tomcat 服务器,默认端口号是 8080。
但是如果电脑上的 8080 端口已经被其他程序占用,就需要修改端口号。
② 数据库连接信息
例如:
- 数据库地址。
- 数据库名称。
- 数据库用户名。
- 数据库密码。
不同项目连接的数据库可能不同,因此需要支持用户自行配置。
③ 第三方系统调用密钥
例如调用第三方支付平台、短信平台时,需要使用对应的密钥。
④ 日志配置
项目运行时可能需要记录普通日志、异常日志,方便开发人员排查问题。
这些信息都可以放在配置文件中
二、Spring Boot 配置文件快速入门
1 找到配置文件

在我们创建spring项目的时候,idea已经帮我们创建好了配置文件
Spring Boot 支持三种常见的配置文件格式:
| 配置文件 | 说明 |
|---|---|
| application.properties | Properties 格式 |
| application.yml | YAML 格式 |
| application.yaml | YAML 格式 |
我们要是创建配置文件的话就放在跟application.propertices一个目录下面
并且Properties 的优先级高于 YML
2 Properties 基本语法
Properties 使用的是键值对的方式进行配置。
基本格式:key=value
举个例子:
# 配置项目端口号 server.port=8080 # 配置数据库连接信息 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false spring.datasource.username=root spring.datasource.password=root
这个点是什么:可以将这个理解为是一个层级,就拿配置端口号的就是server相关的port设置
使用 @Value 读取配置文件
mykey.key1=bite
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PropertiesController {
@Value("${mykey.key1}")
private String key1;
@RequestMapping("key")
public String key(){
return "key:"+key1;
}
}

@Value表示从配置中获取值并且注入到当前属性
其中${mykey.key1}就是表示我们需要去读取的配置项的名称
Propertices的优缺点
- Propertices的优点:代码基本上都可以写在一行,并且通过点这种形式还是比较清楚的理解关系的
- Propertices的缺点:配置项比较多的时候,会出现大量重复的内容,就比如DataSource下面有名字,url以及密码这些配置,如果我们要写的话,每一个配置前面都需要写上DataSource
3 YML 配置文件
YML 基本语法
YML 的基础语法:key: value
注意:
key 和 value 之间必须使用英文冒号加空格的方式连接
对比两种写法
Properties 写法:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/dbname?characterEncoding=utf8&useSSL=false spring.datasource.username=root spring.datasource.password=root
YML 写法:
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/dbname?characterEncoding=utf8&useSSL=false
username: root
password: rootYML可以通过换行的格式来表示层级关系,这样可以少些一些代码
YML 配置不同数据类型
YML 不仅可以配置字符串,还可以配置多种数据类型。
① 字符串
string: value: Hello
表示字符串类型。
② 布尔值
boolean: value: true value1: false
布尔类型只有两个值:
- true:真。
- false:假。
③ 整数
int: value: 10
④ 浮点数
float: value: 3.14159
⑤ Null 空值
null: value: ~
这里的 ~ 表示 null。
也可以理解为没有实际的值。
注意:
null 和空字符串不是一回事。
⑥ 空字符串
empty: value: ''
这里表示一个空字符串。
也就是字符串存在,但是里面没有任何字符
使用 @Value 读取 YML
string: hello: bite
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ReadYmlController {
@Value("${string.hello}")
private String hello;
@RequestMapping("/ymlKey")
public String key() {
return "读取到值:" + hello;
}
}

YML 中单双引号的区别
string: str1: Hello \n Spring Boot. str2: 'Hello \n Spring Boot.' str3: "Hello \n Spring Boot."
其中单引号跟没有引号中的\n就是\n不是换行,但是双引号当中的\n表示换行
YML 配置对象
student: id: 1 name: Java age: 18
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
private int id;
private String name;
private int age;
}当我们希望spring boot将这些配置自动绑定到student对象的多个属性上,就需要用到@ConfigurationProperties这个注解,将yml文件中的student这个配置,一个一个加到我们写得Student类上面,并且一一对应
配置 List 集合
dbtypes:
name:
- mysql
- sqlserver
- db2一个 - 表示一个元素
配置 Map 集合
maptypes:
map:
k1: kk1
k2: kk2
k3: kk3YML 的优缺点
YML 的优点
① 可读性高
YML 使用树形结构组织配置
不需要反复写相同的前缀,结构更加直观
② 支持更多的数据类型
可以直接表达:对象,数组,List,Map
尤其是复杂的层级关系,可以使用缩进来表达
③ 支持多种编程语言
YAML 并不只是 Java 才能使用
Golang、Python、Ruby、JavaScript 等语言也可以使用 YAML 格式
因此它具有比较广泛的应用场景
YML 的缺点
① 不适合编写某些复杂配置文件
② 对格式要求比较严格
以上就是SpringBoot中Properties和YAML两大配置文件详解的详细内容,更多关于SpringBoot配置文件的资料请关注脚本之家其它相关文章!
- SpringBoot 配置文件核心用法(Properties & YAML)详解
- SpringBoot项目属性配置(application.properties、yml和yaml)
- springboot如何获取yaml/yml(或properties)配置文件信息
- SpringBoot读取自定义配置文件方式(properties,yaml)
- SpringBoot配置文件之properties和yml的区别、优先级、读取方式
- SpringBoot 配置文件properties 与 yml 从入门到实战实例教程
- SpringBoot配置入门教程之application.yml与properties全面对比
- SpringBoot配置文件优先级怎么排?properties和yml哪个更优?
相关文章
简单了解JAVA SimpleDateFormat yyyy和YYYY的区别
这篇文章主要介绍了简单了解JAVA SimpleDateFormat yyyy和YYYY的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-03-03
jdk版本管理工具jabba在windows上安装和使用方法
Jabba是一个轻量级的Java版本管理工具,原生支持Windows,这篇文章主要介绍了jdk版本管理工具jabba在windows上安装和使用方法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下2026-04-04
使用maven profile指定配置文件打包适用多环境的方法
这篇文章主要介绍了使用maven profile指定配置文件打包适用多环境的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-08-08


最新评论