在实际项目开发中,我们经常会遇到一些需要动态调整但又不希望硬编码到代码中的参数,例如:
- 数据库连接地址、用户名、密码;
- 第三方 API 的调用地址(如短信、支付、订单服务);
- 文件上传路径、缓存过期时间、线程池大小等。
如果将这些值直接写死在 Java 代码中,一旦环境变更(如从测试切换到生产),就需要重新编译和部署,严重降低系统的灵活性和可维护性。
✅ 正确做法是:将配置信息抽取到外部配置文件中,由 Spring Boot 统一管理。
本节课将带你掌握:
- 使用
application.yml存储配置; - 通过
@Value注解读取单个配置项; - 理解配置文件在不同环境下的作用。
1. 配置文件:application.yml vs application.properties
Spring Boot 支持两种主流配置格式:
| 格式 | 特点 |
application.properties |
键值对形式,兼容性好,但层级不直观 |
application.yml |
推荐!层次清晰、可读性强,支持复杂嵌套结构 |
💡 两者功能完全等价,本课程统一使用
application.yml。
2. 少量配置:使用 @Value 注解
当只需要读取少量配置项时,@Value 是最简单直接的方式。
2.1 在 application.yml 中定义配置
server: port: 8001 # 自定义配置:微服务地址 url: orderUrl: http://localhost:8002 userCenterUrl: http://localhost:8003
📌 注意:
- 缩进必须用 空格(不能用 Tab);
- 冒号后必须有 一个空格;
- 层级通过缩进表示(
orderUrl是url的子属性)。
2.2 在代码中注入配置值
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/test") public class ConfigController { private static final Logger logger = LoggerFactory.getLogger(ConfigController.class); // 使用 @Value("${配置键}") 注入值 @Value("${url.orderUrl}") private String orderUrl; @Value("${url.userCenterUrl}") private String userCenterUrl; @GetMapping("/config") public String testConfig() { logger.info("订单服务地址:{}", orderUrl); logger.info("用户中心地址:{}", userCenterUrl); return "success"; } }
✅ 启动项目后访问
http://localhost:8001/test/config,控制台输出:
订单服务地址:http://localhost:8002 用户中心地址:http://localhost:8003
3. @Value 的高级用法
3.1 设置默认值(防止配置缺失)
@Value("${url.timeout:5000}") private int timeout; // 如果未配置 url.timeout,默认值为 5000
3.2 支持 SpEL 表达式(较少用)
@Value("#{systemProperties['os.name']}") private String osName;
4. 何时使用 @Value?
| 场景 | 是否推荐 |
| 读取 1~3 个简单配置项 | ✅ 推荐 |
| 配置项属于同一业务模块(如数据库、Redis、OSS) | ❌ 不推荐,应使用 @ConfigurationProperties(下节课讲解) |
| 需要类型安全、自动校验、IDE 提示 | ❌ @Value 无类型检查 |
📌 经验法则:
- 少量、零散配置 →
@Value;- 成组、结构化配置 →
@ConfigurationProperties(第 05 课重点)。
5. 多环境配置(Profile)简介
实际项目通常有多个环境:开发(dev)、测试(test)、生产(prod)。Spring Boot 支持通过 Profile 实现配置隔离。
5.1 创建多环境配置文件
src/main/resources/ ├── application.yml # 公共配置 ├── application-dev.yml # 开发环境 ├── application-test.yml # 测试环境 └── application-prod.yml # 生产环境
5.2 激活指定环境
在 application.yml 中指定:
spring: profiles: active: dev # 当前激活 dev 环境
或启动时指定:
java -jar myapp.jar --spring.profiles.active=prod
🔍 示例:
application-prod.yml
url: orderUrl: https://order.prod.example.com userCenterUrl: https://user.prod.example.com
6. 安全提示:敏感信息不要明文存储!
像数据库密码、API 密钥等敏感信息,切勿直接写在配置文件中!
✅ 推荐做法:
- 使用 配置中心(如 Nacos、Apollo、Spring Cloud Config);
- 通过 环境变量 注入(Docker/K8s 场景);
- 使用 加密配置(如 Jasypt)。
7. 总结
本节课我们学习了:
- ✅ 将配置信息从代码中解耦,写入
application.yml; - ✅ 使用
@Value("${key}")注解读取配置值; - ✅ 了解多环境配置(Profile)的基本用法;
- ✅ 认识到
@Value适用于少量、简单的配置场景。
🎯 记住:配置即代码,管理好配置,就是管理好系统的灵活性与安全性。