教你如何使用 SpringBoot 的配置文件
1.配置文件的作用
1.1 什么是配置文件?
Spring Boot
配置文件是一种用于配置 Spring Boot
应用程序的外部化配置方式,可以通过在应用程序中使用不同的配置文件来控制应用程序的行为,而无需在代码中进行硬编码。
它的作用:
- 数据库的连接信息(包含⽤户名和密码的设置);
- 项⽬的启动端⼝;
- 第三⽅系统的调⽤秘钥等信息;
- ⽤于发现和定位问题的普通⽇志和异常⽇志等。
2. 配置文件的格式
在我们用 IDEA
创建了一个 SpringBoot
项目后👆,会默认地为我们创建一个.properties
格式的配置文件:
Spring Boot
支持多种配置文件格式,例如:
Properties
格式文件:.properties
文件是键值对的集合,适合用于简单的配置。YAML
格式文件:.yml
文件采用缩进的方式表示层次结构,适合用于复杂的配置。
(它们的语法后文介绍)
.properties
配置文件与.yml
配置文件可以同时存在在同一个项目中;但是.properties
配置文件的优先级更高,比如:.properties
配置文件、.yml
配置文件都配置了端口server.port
,那么这时以 .properties
中的配置为主,加载完.properties
后,然后再加载yml
的其它配置。
3. properties 配置文件
3.1 properties 配置文件的基本语法
3.1.1 系统配置项
properties
是以键值的形式配置的,key
和 value
之间是以“=”连接的,下面是配置程序的端口号(默认端口号是8080):
# 配置项目的端口号
server.port=9090

像server.port
这样的字段是属性,属性是官方定好了的,属性文档:常见应用程序属性 (spring.io)
我们创建一个类,来测试配置是否成功:

@Controller
@ResponseBody //表示可以返回非静态页面的内容
public class TestController {
@RequestMapping("/hi")//路径
public String hi(){
return "Hello World";
}
}
程序运行后,可以看到端口号已经修改成功了,我们浏览器打开http://localhost:9090/hi
看有没有输出。


3.1.2 自定义配置项
配置文件中可以自定义配置,也就是官方文档中没有的属性:
# 配置项目的端口号
server.port=9090
#用户自定义配置项
hi=hello
test.hi=test_hello //可以加 .
3.2 properties 配置文件乱码问题
上面的配置文件中加了中文注释:
如果你没有换字符集,重启IDEA后可能会乱码,解决方法:
- 设置里面搜索,然后换
UTF-8
:
- 第二个设置相同的操作:


看下面的位置有没有 UTF-8
,有的话就成功了。

- 删除当前的配置文件,重新创建。
3.3 读取 properties 配置文件的内容
读取 properties 配置文件是可以读取其中的所有内容,不管是系统的还是自定义的,格式如下:
@Value("${属性名}") //取出来的是它的值
public/private... 类型 变量;


如果加了层级,这里也要跟着加:


4. yml 配置文件
4.1 为什么会有 yml 配置文件?
- yml 是⼀个可读性高,写法简单、易于理解,它的语法和 JSON 语⾔类似。
- yml 支持更多的数据类型,它可以简单表达清单(数组)、散列表,标量等数据形态。
- 它使⽤空白符号缩进和⼤量依赖外观的特⾊,特别适合⽤来表达或编辑数据结构、各种配置⽂件等。
- yml ⽀持更多的编程语⾔,它不⽌是 Java 中可以使⽤在 Golang、PHP、Python、Ruby、JavaScript、Perl中。
4.2 yml 的基本语法
- 注释:以 # 开头的行表示注释,整行都会被忽略。
- 键值对:以键值对的形式表示数据,使用冒号(:)分隔键和值。
key: value #要加空格
- 映射:使用缩进来表示映射中的数据结构,可以嵌套多层。
parent:
child1:
key1: value1 #相当于properties中的:parent.child1.key1=value1
key2: value2
我们先创建一个 yml
配置文件(把application.properties
给注释掉,容易冲突)。
在 yml 中配置端口号:
# 配置端口号 8888前一定要加空格!!!
server:
port: 8888
改一下前面的代码,并运行:

修改端口成功:
来看看分别用 properties
和 yml
来连接数据库的伪代码:
yml
:
# 数据库连接配置
spring:
datasource:
url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
username: myuser
password: mypass
properties
:
# 数据库连接配置
spring.datasource.url=jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
spring.datasource.username=myuser
spring.datasource.password=mypass
可以看到 yml
比 properties
更简洁。
4.3 yml 配置不同数据类型
# 字符传类型
mystr1: hello \n world # 原样输出
mystr2: 'hello \n world' # 原样输出
mystr3: "hello \n world" # 中间会换行
# 布尔值
boolean.value1: true
boolean.value2: false
# 整数
int.value: 100
int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制
# 浮点数
float.value: 3.14159
float.value1: 314159e-5 # 科学计数法
# Null,~代表null
null.value: ~
4.3 读取 yml 配置内容
读取方法与读取 properties
配置文件的一样:
4.4 在 yml 中配置对象
# 配置一个对象
student:
id: 1
name: zhangsan
age: 20
# 也可以这么写
student1: {id: 2,name: lishi,age: 20}
4.4.1 读取配置文件中的对象
- 创建一个类,其属性与配置文件中的属性一一对应,并且完善其get、set方法。
- 给这个类加上类注解
- 加一个
@ConfigurationProperties("配置文件中对象的名称")
。
- 注入到变量中
结果:
4.5 在 yml 配置 List 集合
方法与上面一样
# 配置一个集合
listtypes:
list: # 集合名
- str1 # 元素 下同
- str2
- str3
- str4
结果:
5. 设置不同环境的配置⽂件
一般在公司中,要求有多个不同的配置文件,比如:
- 主配置文件:application.yml
- 开发环境的配置文件: application-dev.yml
- 测试环境的配置文件: application-test.yml
- 生产环境的配置文件: application-prod.yml
(application-xxx.yml
xxx 位置可以改变)
假如开发环境端口为:8081
测试环境端口为:9090
生产环境端口为:9111
每个配置文件写自己的配置,如果要切换那么就对主配置文件进行修改:
# 任意更换环境
spring:
profiles:
active: test
# 这里的值对应文件后缀,此时为测试环境的配置 端口为 9090
转载自:https://juejin.cn/post/7228888046870806565