Spring Boot 中的项目属性配置

简介: 本课讲解Spring Boot外部化配置,通过`application.yml`管理数据库、API地址等动态参数,避免硬编码。掌握`@Value`读取配置、多环境Profile切换,并了解敏感信息加密与配置中心实践,提升系统灵活性与安全性。(238字)

在实际项目开发中,我们经常会遇到一些需要动态调整但又不希望硬编码到代码中的参数,例如:

  • 数据库连接地址、用户名、密码;
  • 第三方 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);
  • 冒号后必须有 一个空格
  • 层级通过缩进表示(orderUrlurl 的子属性)。

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 适用于少量、简单的配置场景。

🎯 记住配置即代码,管理好配置,就是管理好系统的灵活性与安全性



相关文章
|
12天前
|
数据采集 人工智能 安全
|
7天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
344 164
|
6天前
|
机器学习/深度学习 自然语言处理 机器人
阿里云百炼大模型赋能|打造企业级电话智能体与智能呼叫中心完整方案
畅信达基于阿里云百炼大模型推出MVB2000V5智能呼叫中心方案,融合LLM与MRCP+WebSocket技术,实现语音识别率超95%、低延迟交互。通过电话智能体与座席助手协同,自动化处理80%咨询,降本增效显著,适配金融、电商、医疗等多行业场景。
345 155
|
7天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
581 4
|
15天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
1019 7

热门文章

最新文章