SpringBoot 核心配置文件:application.yml 与 application.properties

不管是改端口、配数据库连接,还是调日志级别,SpringBoot 里所有"个性化配置"几乎都要靠核心配置文件------application.ymlapplication.properties

有同学常问:这俩文件有啥区别?该用哪个?为啥有时候配了不生效?今天就把这两个配置文件讲透,包括语法、优先级、常用配置、踩坑点,看完你就能随心所欲配置 SpringBoot 项目。

这俩文件是干啥的?

SpringBoot 启动时,会自动加载 src/main/resources 下的 application.ymlapplication.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 语法必踩坑点:

  1. 缩进必须用2个空格,不能用 Tab(用 Tab 会直接启动失败);

  2. 冒号 : 后必须加1个空格 (比如 port:8090 错,port: 8090 对);

  3. 字符串默认不用加引号,但如果包含特殊字符(比如 :空格),必须加单/双引号;

  4. 大小写敏感(比如 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 会加载多个位置的配置文件,优先级从高到低:

  1. 命令行参数(比如启动时加 --server.port=8090);

  2. 项目根目录下的 config 文件夹(./config/application.yml);

  3. 项目根目录(./application.yml);

  4. src/main/resources/config

    文件夹;

  5. 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 个坑
  1. YAML 缩进/空格错误

    比如 port:8090(冒号后没空格)、用 Tab 缩进 → 启动报错 YAMLException

    解决:严格用 2 个空格缩进,冒号后加 1 个空格。

  2. 配置项写错大小写

    比如 Server.Port=8090 → 不生效(SpringBoot 配置项全小写);

    解决:参考官方文档,配置项全小写,层级用点分隔。

  3. 多环境文件名写错

    比如 application-dev-yml(少了点)、applicationDev.yml(格式错);

    解决:必须是 application-环境名.yml(比如 application-dev.yml)。

  4. 数据库 URL 特殊字符没转义

    比如 URL 里有 & 没转义 → 配置解析失败;

    解决:YAML 里可以用单引号包裹 URL,或者转义特殊字符。

  5. 配置文件放错位置

    比如把 application.ymlsrc/main/java 下 → SpringBoot 扫不到;

    解决:必须放 src/main/resources 或其子目录。

最后总结
  1. application.properties

    是键值对格式,新手易上手;application.yml 是层级格式,更简洁,大厂主流;

  2. YAML 语法要注意缩进(2空格)、冒号后空格、大小写敏感;

  3. 配置文件有优先级,多环境配置用 application-环境名.yml + spring.profiles.active 切换;

  4. 配了不生效先查:语法是否错、位置是否对、优先级是否被覆盖。

下一期,咱们会讲:如何自定义配置项(比如 my.config.name=xxx),并通过 @ConfigurationProperties 绑定到 Java 类,实现更灵活的配置管理。

如果这篇文章帮你搞定了配置文件的问题,麻烦点个赞、在看,关注我,后续还有更多 SpringBoot 实战技巧,从入门到精通


相关推荐
散峰而望2 小时前
【基础算法】从入门到实战:递归型枚举与回溯剪枝,暴力搜索的初级优化指南
数据结构·c++·后端·算法·机器学习·github·剪枝
liurunlin8882 小时前
HeidiSQL导入与导出数据
java
leaves falling2 小时前
有效的字母异位词
java·服务器·前端
我真会写代码2 小时前
Spring面试高频题:从基础到源码,通俗拆解+避坑指南
java·spring·面试
huaweichenai3 小时前
java的时间操作介绍
java·开发语言
前端付豪3 小时前
Memory V1:让 AI 记住你的关键信息
前端·后端·llm
编码忘我3 小时前
RokcetMq的顺序消费、防丢失、去重
后端
毕设源码-朱学姐3 小时前
【开题答辩全过程】以 基于SpringBoot+Vue的百货商品进出货平台为例,包含答辩的问题和答案
java·spring boot·后端
码路飞3 小时前
Claude Code 大规模封号,我花了一晚上才搞明白:setup token 和 API key 根本不是一回事
后端·claude