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

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



相关文章
|
安全
[UDS] --- TesterPresent 0x3E
[UDS] --- TesterPresent 0x3E
716 1
|
Java Maven Spring
SpringBoot-读取配置文件(映射法)
本文是关于Spring Boot框架下读取配置文件的指南。该指南介绍了如何通过注解和属性文件来加载和访问应用程序的配置信息。Spring Boot提供了简单而强大的功能,可以轻松地加载各种类型的配置文件,并将其映射到Java对象中。通过使用@ConfigurationProperties注解,或者使用@Value注解从配置文件中读取属性值。
897 0
|
3月前
|
数据安全/隐私保护
阿里云号码百科支持哪些功能?号码百科不同功能收费价格表整理
阿里云号码百科提供号码归属、状态查询、二次号检测、在网时长及运营商/企业/身份证要素核验等服务,支持加密通信与风控分析,按套餐包计费,广泛应用于注册验证、广告归因与安全防控场景。
564 0
|
3月前
|
JSON 前端开发 Java
Spring Boot中的项目属性配置
本文介绍了Spring Boot中配置管理及常用MVC注解的使用。通过`@Value`和`@ConfigurationProperties`实现不同环境下的配置分离与动态读取,结合多配置文件(如application-dev.yml、application-pro.yml)灵活切换开发与生产环境。同时详解了@RestController、@RequestMapping、@PathVariable、@RequestParam和@RequestBody等核心注解,涵盖RESTful接口设计、参数绑定、JSON数据接收等常见场景,提升开发效率与项目可维护性。
|
6月前
|
存储 数据采集 数据挖掘
终于有人把数据中台讲明白了
企业数据日益庞大,报表堆积、系统分散,决策时却常面临数据难找、难懂的问题。为此,“数据中台”应运而生。它如同数据服务工厂,将原始数据转化为可复用的智能服务,打通数据孤岛,提升业务响应速度,助力企业实现数据驱动。本文详解数据中台的本质、架构与核心价值,揭示其如何真正赋能企业未来。
终于有人把数据中台讲明白了
|
3月前
|
存储 缓存 网络协议
阿里云服务器通用型g7、g7a、g8a、g8ae、g8i、g8y、g9i实例对比,均衡性能适配多场景,精准选型
在阿里云丰富的云服务器实例产品线中,通用型实例凭借其均衡的性能配置与广泛的应用适应性,已成为众多企业级用户及开发者的首选方案,其中比较热门的通用型实例规格主要有g7、g7a、g8a、g8ae、g8i、g8y、g9i等,本文通过详尽的技术解析与对比分析,帮助用户深入理解这几个实例的差异化特性,从而为用户的业务部署提供科参考和选型依据。
244 2
|
4月前
|
人工智能 自然语言处理 数据可视化
AI Agent框架
AI Agent框架选型需权衡灵活性与易用性,根据团队能力、项目复杂度及合规需求选择。开发者可选LangGraph、AutoGen等高定制框架,业务侧推荐Dify、Coze等低代码平台,核心是匹配场景,而非追逐热门技术。

热门文章

最新文章