Spring Boot 读取自定义配置属性:@Value与@ConfigurationProperties详解

Chloe
Chloe
发布时间:2026-10-16| 6人浏览过
原创

本文将深入解析Spring Boot中读取自定义属性配置的两种主要机制:@Value 和 @ConfigurationProperties。涵盖从单值注入到对象绑定、默认值处理、SpEL表达式支持及多文件加载的完整实操指南。

结果或目标

在Spring Boot应用中,我们需要灵活读取.properties或YAML配置文件中的键值对,以实现配置与代码分离。核心目标是掌握以下两种注入策略:

  • 松散绑定(Loose Coupling):适用于少量、简单的配置项注入。
  • 类型安全绑定(Type-safe Binding):适用于结构化的复杂配置组管理。

准备条件

假设项目中存在如下配置文件内容,我们需要读取lixl.person下的属性:

lixl:
  person:
    name: lixl
    age: 20

真实操作顺序

第1步:使用 @Value 进行单值注入

目的:将单个配置项映射到类的字段、方法参数或构造器参数上。入口:Spring容器管理的Bean(需加@Component等注解)。
动作:
1. 定义一个类并使用@Component标注。
2. 在字段上使用@Value("${key}")注入。

@Component
public class Person {

    @Value("${lixl.person.name}")
    private String name;

    @Value("${lixl.person.age}")
    private String age;

    @Override
    public String toString() {
        return "name:" + this.name + ";age:" + this.age;
    }
    // Getter and Setter methods...
}

观察到的完成状态:上述代码展示了最基础的字段注入。源码表明@Value不仅支持字段,还支持方法及构造器参数注入。

变体:在Setter方法中注入

如果需要在赋值前后执行额外逻辑,可注解于Setter方法:

	@Value("${lixl.person.name}")
    public void setName(String name) {
        this.name = name;
    }

变体:在构造器中注入

在Spring Boot推荐的做法中,使用构造器注入可以更明确地表达依赖:

    public Person(@Value("${lixl.person.name}")String name, @Value("${lixl.person.age}")String age) {
        this.name = name;
        this.age = age;
    }

进阶:设置默认值

当配置文件中缺失某个键时,可以使用冒号:设定默认值,防止启动报错:

// 若配置未提供name,则默认为"张三"
 public Person(@Value("${lixl.person.name:张三}")String name, @Value("${lixl.person.age}")String age) { ... }

进阶:使用 SpEL 表达式

除了读取配置文件,@Value还可通过#{}包裹SpEL表达式进行运算或硬编码赋值。例如为性别字段直接赋固定值:

   @Value("#{'男'}") 
   private String gender;

第2步:使用 @ConfigurationProperties 进行批量绑定

目的:将具有相同前缀的一组配置项自动映射为一个Java Bean。这种方式具有更强的类型安全性,且IDE能提供更好的智能提示。
入口:同@Value,同样需要组件化Bean。动作:
1. 定义目标Bean并标注@Component。
2. 使用@ConfigurationProperties(prefix = "xxx")指定前缀匹配规则。

假设有如下配置:

test.name='lixl'
test.age=20  // 注意:建议写数字而非字符串以触发自动转换

编写对应的配置类:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "test")
public class ConfigTest {

    private String name;
    private Integer age; // 使用Integer而非String以展示类型绑定能力

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public Integer getAge() { return age; }
    public void setAge(Integer age) { this.age = age; }
}

第3步:自定义配置文件路径

如果配置信息不在默认的application.properties中,而是存放在独立文件中,可以通过@PropertySource显式加载:

使用注解:@PropertySource("classpath:my-config.properties")将该文件加入上下文环境变量中。

简要总结

@Value适合注入个别属性或表达式计算,语法简洁但不够类型安全;@ConfigurationProperties更适合结构化数据的“宽松绑定”,配合JSR-303校验可实现更严谨的配置管理。开发者可根据项目配置规模选择合适的方式。

以上就是Spring Boot如何读取自定义属性的详细内容,更多关于Spring Boot读取自定义属性的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。