配置是 spring boot 的灵魂。本文将彻底讲清 yml 与 properties 的区别、多环境配置、配置优先级和类型安全的配置绑定,帮你避开 90% 的配置坑。
一、为什么 spring boot 4 更推荐 yml?
spring boot 4 中,官方示例和自动配置默认都偏向 yaml。
properties 写法(老派)
server.port=8081 spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=root
yml 写法(现代、推荐)
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: rootyml 的优势:
- 层级清晰,一眼看懂结构
- 复用前缀,减少重复
- 天然支持复杂对象 / list / map
- idea 支持自动补全和校验
结论:新项目一律用 yml,老项目维护才用 properties。
二、yaml 语法三大铁律(写错就启动失败)
铁律 1:冒号后面必须有空格
❌ 错误:
server: port:8081
✅ 正确:
server: port: 8081
铁律 2:使用空格缩进,禁止使用 tab
spring boot 4 对此非常严格,缩进不一致会直接报错。
铁律 3:字符串默认不需要引号
app: name: spring boot 4 demo
特殊字符才需要引号:
app: description: "hello: spring boot"
三、多环境配置:dev / test / prod(企业级必备)
这是面试和实战必问点。
核心思想
- 一个主配置
- 多个环境配置
- 通过
spring.profiles.active切换
文件命名规则
application.yml # 主配置 application-dev.yml # 开发环境 application-test.yml # 测试环境 application-prod.yml # 生产环境
主配置文件(application.yml)
spring:
profiles:
active: dev表示当前激活 dev 环境。
各环境示例
开发环境(application-dev.yml)
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/dev_db
username: dev
password: dev123生产环境(application-prod.yml)
server:
port: 80
spring:
datasource:
url: jdbc:mysql://prod-db:3306/prod_db
username: ${db_user}
password: ${db_password}生产环境推荐:
- 使用环境变量
- 不写死密码
启动时指定环境(非常常用)
java -jar app.jar --spring.profiles.active=prod
四、配置优先级(非常重要!记不住容易踩雷)
spring boot 4 加载配置的优先级从高到低:
命令行参数
--server.port=8081
jvm 系统属性
-dserver.port=8081
操作系统环境变量
application-{profile}.yml
- application.yml
- @propertysource 注解
- 默认属性
结论:越晚加载,优先级越高;外部配置 > 内部配置。
五、自定义配置与 @value(简单但不推荐)
定义配置
app: author: 张三 version: 1.0.0
读取配置
@value("${app.author}")
private string author;
@value("${app.version}")
private string version;@value 的缺点
- 不支持复杂对象
- 不支持校验
- 配置分散,难维护
企业级项目不推荐大量使用 @value
六、@configurationproperties(强烈推荐,类型安全)
这是 spring boot 最优雅的配置方式。
定义配置类
@component
@configurationproperties(prefix = "app")
public class appproperties {
private string author;
private string version;
private list<string> features = new arraylist<>();
// getter / setter
}yml 配置
app:
author: 张三
version: 4.0.0
features:
- aot
- graalvm
- native image使用配置
@restcontroller
public class democontroller {
@autowired
private appproperties appproperties;
@getmapping("/info")
public appproperties info() {
return appproperties;
}
}优点:
- 类型安全
- 支持 idea 自动补全
- 支持校验(jsr‑303)
- 结构清晰,易维护
七、配置校验(生产级必备)
@component
@configurationproperties(prefix = "app")
@validated
public class appproperties {
@notblank
private string author;
@min(1)
private int versioncode;
// getter / setter
}启动时会自动校验,配置错误直接启动失败,避免线上事故。
八、spring boot 4 中的新变化(补充)
- yml 解析器更严格(容错率更低)
- 对 kubernetes configmap / secret 支持更友好
- aot 模式下配置处理更早,启动更快
九、常见配置坑位总结(血泪教训)
❌ 坑1:缩进不一致
现象:启动报错 while scanning a simple key
✅ 解决:统一使用空格,idea 开启 yaml 校验
❌ 坑2:环境配置未生效
现象:配置写了,但读不到
✅ 解决:检查 spring.profiles.active
❌ 坑3:生产环境密码写死
现象:代码泄露,数据库被删
✅ 解决:使用环境变量或配置中心
❌ 坑4:@value 泛滥
现象:配置分散,难以维护
✅ 解决:改用 @configurationproperties
十、本篇总结(重点记住这 4 点)
spring boot 4 首选 yml
多环境配置是标配
配置优先级:命令行 > jvm > 环境变量 > yml
@configurationproperties 是企业级首选
到此这篇关于springboot配置入门教程之application.yml与properties全面对比的文章就介绍到这了,更多相关springboot配置文件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论