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 实战技巧,从入门到精通


相关推荐
言慢行善17 小时前
sqlserver模糊查询问题
java·数据库·sqlserver
专吃海绵宝宝菠萝屋的派大星17 小时前
使用Dify对接自己开发的mcp
java·服务器·前端
大数据新鸟17 小时前
操作系统之虚拟内存
java·服务器·网络
Tong Z17 小时前
常见的限流算法和实现原理
java·开发语言
凭君语未可18 小时前
Java 中的实现类是什么
java·开发语言
He少年18 小时前
【基础知识、Skill、Rules和MCP案例介绍】
java·前端·python
克里斯蒂亚诺更新18 小时前
myeclipse的pojie
java·ide·myeclipse
迷藏49418 小时前
**eBPF实战进阶:从零构建网络流量监控与过滤系统**在现代云原生架构中,**网络可观测性**和**安全隔离**已成为
java·网络·python·云原生·架构
迷藏49418 小时前
**发散创新:基于Solid协议的Web3.0去中心化身份认证系统实战解析**在Web3.
java·python·web3·去中心化·区块链