如何在 Spring Boot 中定义和读取 自定义配置

前言

在Spring Boot中定义和读取自定义配置是日常开发中常见的需求,它允许我们以灵活的方式管理应用的配置信息,无论是通过外部配置文件(如application.propertiesapplication.yml)还是通过环境变量。

作为高级程序员,我们需要掌握这一技能,以确保应用的可配置性和可维护性。以下是一个详细的步骤说明,包括示例代码,展示如何在Spring Boot中定义和读取自定义配置。

在Spring Boot中,你可以通过以下步骤定义和读取自定义配置:

  • application.propertiesapplication.yml中定义自定义配置项。

例如,在application.yml中添加:

XML 复制代码
app:
  custom:
    my-property: value
  • 创建一个配置类来绑定这些属性。
java 复制代码
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
 
@Configuration
@ConfigurationProperties(prefix = "app.custom")
public class CustomProperties {
 
    private String myProperty;
 
    public String getMyProperty() {
        return myProperty;
    }
 
    public void setMyProperty(String myProperty) {
        this.myProperty = myProperty;
    }
}
  • 在Spring Bean中注入CustomProperties类来使用配置值。
java 复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
 
@Component
public class MyComponent {
 
    private final CustomProperties customProperties;
 
    @Autowired
    public MyComponent(CustomProperties customProperties) {
        this.customProperties = customProperties;
    }
 
    public void printCustomProperty() {
        System.out.println(customProperties.getMyProperty());
    }
}

确保@ConfigurationProperties注解的prefix属性与你在配置文件中定义的前缀相匹配。Spring Boot会自动将配置属性绑定到CustomProperties类的字段上。然后你可以在应用程序的任何部分通过自动装配的方式来使用这些配置值。

或者:

定义自定义配置属性

XML 复制代码
# application.properties
myapp.name=Spring Boot Application
myapp.description=This is a demo application for custom configuration
myapp.server.port=8081

创建配置类

接下来,我们需要创建一个配置类来绑定这些自定义属性。在Spring Boot中,这通常通过@ConfigurationProperties注解实现,它允许我们将配置文件中的属性绑定到JavaBean上。

java 复制代码
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConfigurationProperties(prefix = "myapp")
public class MyAppConfig {

    private String name;
    private String description;
    private int serverPort;

    // 标准的getter和setter方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public int getServerPort() {
        return serverPort;
    }

    public void setServerPort(int serverPort) {
        this.serverPort = serverPort;
    }
}

注意,@ConfigurationProperties(prefix = "myapp")注解指定了配置属性的前缀为myapp,这样Spring Boot就能自动将application.properties中所有以myapp开头的属性绑定到MyAppConfig类的相应字段上。

读取配置

我们可以在应用的任何地方通过依赖注入的方式读取这些配置。例如,在一个Controller中

java 复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyAppConfigController {

    private final MyAppConfig myAppConfig;

    @Autowired
    public MyAppConfigController(MyAppConfig myAppConfig) {
        this.myAppConfig = myAppConfig;
    }

    @GetMapping("/config")
    public String getConfig() {
        return "Name: " + myAppConfig.getName() + ", Description: " + myAppConfig.getDescription() + ", Server Port: " + myAppConfig.getServerPort();
    }
}

总结

通过上述步骤,我们成功地在Spring Boot中定义了自定义配置属性,并通过@ConfigurationProperties注解将它们绑定到了JavaBean上。最后,我们通过依赖注入的方式在应用中读取这些配置。这种方式不仅提高了代码的可读性和可维护性,还使得配置管理变得更加灵活和方便。在实际开发中,合理利用Spring Boot的配置管理功能,可以大大提升应用的灵活性和可扩展性。

相关推荐
fīɡЙtīиɡ ℡2 分钟前
AI 应用系统设计
java·开发语言·人工智能
城管不管10 分钟前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
码匠许师傅10 分钟前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
倔强的石头10618 分钟前
向量数据库从相似度检索走向融合数据底座
数据库
AI绘画哇哒哒23 分钟前
【建议收藏!】35岁后端血泪忠告,这3类人别硬转Agent(过来人亲述)
java·人工智能·后端·ai·程序员·大模型·agent
最强小杰1 小时前
gpt-5.6-sol 频繁报 503 怎么办?区分容量熔断和限速 429 的排查方法 + 可复用 retry wrapper
java·人工智能·gpt·ai
今天AI了吗2 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习
lilian2333 小时前
Harmony os 技术实战|拼豆制图27:用单字符编码承载 50 张 70×70 图纸
前端·数据库·华为·harmonyos
吠品3 小时前
Wine 在 Linux 上运行 Windows 软件完整指南
java·linux·服务器
2601_953720823 小时前
【计算机毕业设计】基于Vue与Spring Boot的高校兼职信息服务平台设计与实现
spring boot·后端·课程设计