不管是改端口、配数据库连接,还是调日志级别,SpringBoot 里所有"个性化配置"几乎都要靠核心配置文件------application.yml 和 application.properties。
有同学常问:这俩文件有啥区别?该用哪个?为啥有时候配了不生效?今天就把这两个配置文件讲透,包括语法、优先级、常用配置、踩坑点,看完你就能随心所欲配置 SpringBoot 项目。
这俩文件是干啥的?
SpringBoot 启动时,会自动加载 src/main/resources 下的 application.yml 或 application.properties(也可以放 config 子目录),核心作用是:
覆盖 SpringBoot 的默认配置,定制项目的运行规则。
比如:
-
默认端口 8080 → 改配成 8090;
-
默认数据库连接为空 → 配 MySQL/Redis 连接信息;
-
默认日志级别 INFO → 改成 DEBUG 方便调试。
这俩文件本质是"同一功能的不同写法",核心区别是语法格式:
-
application.properties:键值对格式(传统写法,新手易上手);
-
application.yml:YAML 格式(层级化写法,更简洁,大厂主流)。
实战1:基础语法对比(看完就会写)
先看最常用的"改端口+配应用名",对比两种写法:
① application.properties 写法(键值对,用 = 分隔)
go
# 配置应用名称(自定义,方便日志识别)
spring.application.name=first-springboot-api
# 配置服务器端口(默认8080,改成8090)
server.port=8090
# 配置日志级别(root 根日志,debug 级别)
logging.level.root=debug
# 配置特定包的日志级别(com.xxx 包下的日志用 info)
logging.level.com.xxx=info
② application.yml 写法(层级化,用缩进分隔,冒号后必须加空格)
go
1# YAML 注释用 #,层级靠缩进(2个空格,别用tab!)
2spring:
3 application:
4name: first-springboot-api # 冒号后必须加空格,否则报错
5server:
6port:8090
7logging:
8 level:
9root: debug
10com.xxx: info
⚠️ YAML 语法必踩坑点:
-
缩进必须用2个空格,不能用 Tab(用 Tab 会直接启动失败);
-
冒号
:后必须加1个空格 (比如port:8090错,port: 8090对); -
字符串默认不用加引号,但如果包含特殊字符(比如
:、空格),必须加单/双引号; -
大小写敏感(比如
Server.port错,server.port对)。
实战2:常用配置场景
不管用哪种格式,这些配置都是日常开发必写的,直接复制用:
① 数据库连接配置(MySQL + MyBatis)
go
# application.properties 写法
spring.datasource.url=jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# MyBatis 映射文件位置
mybatis.mapper-locations=classpath:mapper/*.xml
# MyBatis 别名包
mybatis.type-aliases-package=com.xxx.entity
go
1# application.yml 写法
2spring:
3 datasource:
4url: jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
5username: root
6password:123456
7driver-class-name: com.mysql.cj.jdbc.Driver
8mybatis:
9mapper-locations: classpath:mapper/*.xml
10type-aliases-package: com.xxx.entity
② Redis 配置
go
# application.properties 写法
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=
spring.redis.database=0
spring.redis.timeout=10000ms
go
1# application.yml 写法
2spring:
3 redis:
4host: localhost
5port:6379
6password:# 空值直接写,不用填内容
7database:0
8timeout: 10000ms
③ 跨域配置(CORS)
go
1# YAML 写法更简洁,推荐用这个
2spring:
3 web:
4 cors:
5allowed-origins: http://localhost:8081# 允许的前端域名
6allowed-methods: GET,POST,PUT,DELETE # 允许的请求方法
7allowed-headers: * # 允许的请求头
8allow-credentials:true# 允许携带cookie
关键知识点:配置文件的优先级
SpringBoot 会加载多个位置的配置文件,优先级从高到低:
-
命令行参数(比如启动时加
--server.port=8090); -
项目根目录下的
config文件夹(./config/application.yml); -
项目根目录(
./application.yml); -
src/main/resources/config文件夹;
-
src/main/resources文件夹(默认位置)。
⚠️ 实用技巧:
-
开发时把核心配置放
src/main/resources,临时改配置用命令行参数(不用改文件); -
如果多个文件有相同配置,高优先级的会覆盖低优先级的(比如命令行参数覆盖配置文件)。
实战3:多环境配置(dev/test/prod)
开发中不可能只用一套配置(开发环境连测试库,生产环境连正式库),SpringBoot 支持多环境配置,超简单:
第一步:创建多环境配置文件
-
开发环境:
application-dev.yml -
测试环境:
application-test.yml -
生产环境:
application-prod.yml
比如 application-dev.yml 配测试库:
go
1spring:
2 datasource:
3url: jdbc:mysql://dev-mysql:3306/test_db
4username: dev-root
5password: dev-123456
6server:
7port:8080
application-prod.yml 配正式库:
go
1spring:
2 datasource:
3url: jdbc:mysql://prod-mysql:3306/prod_db
4username: prod-root
5password: prod-123456
6server:
7port:80
第二步:在主配置文件指定激活的环境
go
1# application.yml 主文件
2spring:
3 profiles:
4active: dev # 激活开发环境,想切生产就改成 prod
也可以启动时指定环境(优先级更高):
go
1# 启动时激活生产环境
2java-jar first-springboot-api.jar --spring.profiles.active=prod
必避的 5 个坑
-
YAML 缩进/空格错误
:
比如
port:8090(冒号后没空格)、用 Tab 缩进 → 启动报错YAMLException;解决:严格用 2 个空格缩进,冒号后加 1 个空格。
-
配置项写错大小写
:
比如
Server.Port=8090→ 不生效(SpringBoot 配置项全小写);解决:参考官方文档,配置项全小写,层级用点分隔。
-
多环境文件名写错
:
比如
application-dev-yml(少了点)、applicationDev.yml(格式错);解决:必须是
application-环境名.yml(比如application-dev.yml)。 -
数据库 URL 特殊字符没转义
:
比如 URL 里有
&没转义 → 配置解析失败;解决:YAML 里可以用单引号包裹 URL,或者转义特殊字符。
-
配置文件放错位置
:
比如把
application.yml放src/main/java下 → SpringBoot 扫不到;解决:必须放
src/main/resources或其子目录。
最后总结
-
application.properties是键值对格式,新手易上手;
application.yml是层级格式,更简洁,大厂主流; -
YAML 语法要注意缩进(2空格)、冒号后空格、大小写敏感;
-
配置文件有优先级,多环境配置用
application-环境名.yml+spring.profiles.active切换; -
配了不生效先查:语法是否错、位置是否对、优先级是否被覆盖。
下一期,咱们会讲:如何自定义配置项(比如 my.config.name=xxx),并通过 @ConfigurationProperties 绑定到 Java 类,实现更灵活的配置管理。
如果这篇文章帮你搞定了配置文件的问题,麻烦点个赞、在看,关注我,后续还有更多 SpringBoot 实战技巧,从入门到精通