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

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



相关文章
|
2月前
|
JSON 前端开发 Java
Spring Boot中的项目属性配置
本文介绍了Spring Boot中配置管理及常用MVC注解的使用。通过`@Value`和`@ConfigurationProperties`实现不同环境下的配置分离与动态读取,结合多配置文件(如application-dev.yml、application-pro.yml)灵活切换开发与生产环境。同时详解了@RestController、@RequestMapping、@PathVariable、@RequestParam和@RequestBody等核心注解,涵盖RESTful接口设计、参数绑定、JSON数据接收等常见场景,提升开发效率与项目可维护性。
|
安全
[UDS] --- TesterPresent 0x3E
[UDS] --- TesterPresent 0x3E
655 1
|
Java Maven Spring
SpringBoot-读取配置文件(映射法)
本文是关于Spring Boot框架下读取配置文件的指南。该指南介绍了如何通过注解和属性文件来加载和访问应用程序的配置信息。Spring Boot提供了简单而强大的功能,可以轻松地加载各种类型的配置文件,并将其映射到Java对象中。通过使用@ConfigurationProperties注解,或者使用@Value注解从配置文件中读取属性值。
859 0
|
Java 微服务
【SpringBoot】SpringBoot工程 自定义配置文件
【SpringBoot】SpringBoot工程 自定义配置文件
361 0
|
5月前
|
安全 网络安全 开发工具
Mac电脑多平台Git账号设置
通过配置SSH密钥与config文件,可为GitHub、Gitee等平台分配独立密钥,实现自动识别与认证。生成密钥后,将公钥添加至对应平台,并在~/.ssh/config中设置主机别名与密钥路径。此后使用SSH地址克隆仓库,Git将自动选用正确密钥,免去手动切换与密码输入,提升效率与安全性。(238字)
521 2
|
存储 安全 Java
Spring Boot读取配置文件
Spring Boot读取配置文件
|
JavaScript 前端开发
TS基础语法
TypeScript(缩写为TS)是一种静态类型的JavaScript超集,它为JavaScript添加了类型注解和其他扩展功能。下面是TypeScript的基础语法
|
设计模式 存储 人工智能
基于阿里云通义星尘实现多智能体(Multi-agent)协同工作的构想与尝试
近年来,大规模预训练模型(大模型)快速发展,其能力显著增强,尤其是在语言理解和生成方面取得了突破。然而,尽管大模型强大,但仍需被动响应指令,为此,研究转向了更具自主性的新范式——智能体(AI agent)。不同于仅执行命令的大模型,智能体不仅能理解复杂指令,还能规划行动步骤并在特定领域自我学习与改进。为进一步提高处理复杂任务的能力,多智能体(Multi-Agent)系统应运而生,多个智能体通过协作、交流信息和共享资源,共同完成更为复杂精细的任务。本文探讨了如何利用阿里云的通义星尘实现基础的多智能体协同工作,介绍了智能体的概念、优势及局限性,并通过具体案例展示了如何构建协作型多智能体系统。
|
小程序
【微信小程序-原生开发】wxml 支持 includes (wxml中执行函数的方法)
【微信小程序-原生开发】wxml 支持 includes (wxml中执行函数的方法)
818 0
|
消息中间件 Java RocketMQ
修改rocketmq的日志文件位置
修改rocketmq的日志文件位置
622 0
修改rocketmq的日志文件位置