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

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



相关文章
|
5月前
|
数据安全/隐私保护
阿里云号码百科支持哪些功能?号码百科不同功能收费价格表整理
阿里云号码百科提供号码归属、状态查询、二次号检测、在网时长及运营商/企业/身份证要素核验等服务,支持加密通信与风控分析,按套餐包计费,广泛应用于注册验证、广告归因与安全防控场景。
824 0
|
8月前
|
Java 关系型数据库 MySQL
Spring Boot自动配置:魔法背后的秘密
Spring Boot 自动配置揭秘:只需简单配置即可启动项目,背后依赖“约定大于配置”与条件化装配。核心在于 `@EnableAutoConfiguration` 注解与 `@Conditional` 系列条件判断,通过 `spring.factories` 或 `AutoConfiguration.imports` 加载配置类,实现按需自动装配 Bean。
|
安全
[UDS] --- TesterPresent 0x3E
[UDS] --- TesterPresent 0x3E
816 1
|
5月前
|
JSON 前端开发 Java
Spring Boot中的项目属性配置
本文介绍了Spring Boot中配置管理及常用MVC注解的使用。通过`@Value`和`@ConfigurationProperties`实现不同环境下的配置分离与动态读取,结合多配置文件(如application-dev.yml、application-pro.yml)灵活切换开发与生产环境。同时详解了@RestController、@RequestMapping、@PathVariable、@RequestParam和@RequestBody等核心注解,涵盖RESTful接口设计、参数绑定、JSON数据接收等常见场景,提升开发效率与项目可维护性。
|
4月前
|
前端开发 Java Nacos
application.yml和bootstrap.yml这两个配置文件有什么区别?
`bootstrap.yml` 与 `application.yml` 是 Spring Boot/Cloud 项目中的两类配置文件。前者用于应用启动前加载,主要配置远程配置中心(如 Nacos)、加密等关键信息,优先级高;后者是默认主配置,用于常规配置如端口、数据库等。自 Spring Boot 2.4+ 起,默认不再启用 `bootstrap` 机制,推荐使用 `spring.config.import` 在 `application.yml` 中统一导入配置,以简化流程、降低复杂度。纯 Spring Boot 应用不加载 `bootstrap.yml`。
745 0
|
存储 安全 Java
Spring Boot读取配置文件
Spring Boot读取配置文件
|
5月前
|
JSON API 定位技术
万年历API接口详细教程:获取指定日12时辰详细信息
万年历“取指定日-12时辰详细信息”API提供免费、全面的农历及时辰数据,涵盖干支、五行、纳音、宜忌、方位等90余项命理信息,支持POST/GET请求,适用于算命、风水、日历类应用开发。
1090 0

热门文章

最新文章