专栏名称: Java基基
一个苦练基本功的 Java 公众号,所以取名 Java 基基
目录
相关文章推荐
界面新闻  ·  X被加拿大调查,或违反隐私法 ·  3 天前  
奴隶社会  ·  没有人能在“独善其身”中安然无恙 ·  3 天前  
51好读  ›  专栏  ›  Java基基

解锁 SpringBoot 的强大配置功能

Java基基  · 公众号  ·  · 2024-05-22 23:44

正文

👉 这是一个或许对你有用 的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入 芋道快速开发平台 知识星球。 下面是星球提供的部分资料:

👉 这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能:

  • Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud
  • 视频教程:https://doc.iocoder.cn
【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本

来源:blog.csdn.net/Mrxiao_bo
/article/details/133637337


1 前言

在当今的软件开发世界中,配置管理是至关重要的一部分。Spring框架为我们提供了多种配置方式,其中 @ConfigurationProperties @PropertySources 是强大的工具,可以帮助我们轻松管理应用程序的配置信息。

本博客将深入探讨这两个关键注解,介绍它们的用途以及如何在Spring应用程序中使用它们。无论你是新手还是经验丰富的开发者,这篇博客都将为你提供有关配置文件管理的深入知识,帮助你编写更具可维护性和可扩展性的代码。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

2 什么是@ConfigurationProperties和@PropertySources

@ConfigurationProperties @PropertySources 都是与属性配置相关的注解,用于在 Spring 应用程序中管理和加载配置信息。

@ConfigurationProperties:

@ConfigurationProperties 是 Spring Boot 中的一个注解,用于将配置文件中的属性值绑定到 Java Bean 上。通常,这个注解用于将外部属性文件中的属性值映射到应用程序的配置类中,以便在整个应用程序中方便地访问和使用这些属性。

这个注解通常与 @Configuration @Component 一起使用,以将配置属性绑定到一个特定的 Java Bean。通过在类上使用 @ConfigurationProperties ,您可以将属性文件中的键与 Java Bean 的字段或属性进行映射。

示例:

@Configuration
@ConfigurationProperties(prefix = "myapp")
public class MyAppProperties {
    private String name;
    private String version;
    // getters and setters
}

在上述示例中, @ConfigurationProperties 注解将以 myapp 前缀开头的属性映射到 MyAppProperties 类的字段中。

@PropertySources:

@PropertySources 是 Spring Framework 中的注解,用于指定多个属性源,以便在 Spring 应用程序中解析属性。每个属性源可以是一个属性文件,用于存储配置信息。与 @PropertySource 类似, @PropertySources 允许您在多个地方定义属性源,以便将配置信息分散在不同的文件中。

这个注解通常与 @Configuration 一起使用,以将多个属性源引入 Spring 应用程序的环境中。

示例:

@Configuration
@PropertySources({
    @PropertySource("classpath:application.properties"),
    @PropertySource("classpath:custom.properties")
})
public class AppConfig {
    // 这里可以注入和使用从属性文件加载的配置属性
}

在上述示例中, @PropertySources 注解指定了两个属性源,分别是 application.properties custom.properties

总结:

  • @ConfigurationProperties 主要用于将外部属性映射到 Java Bean,适用于 Spring Boot 应用程序。
  • @PropertySources 主要用于指定多个属性源,以在 Spring 应用程序中加载配置属性,适用于标准的 Spring 应用程序。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

3 @ConfigurationProperties的使用

在 Spring Boot 应用程序中,您可以使用 @ConfigurationProperties 注解来绑定配置属性,并将其注入到 Spring Bean 中。以下是如何执行这些步骤的详细说明:

步骤 1: 创建 Java POJO 类

首先,创建一个普通的 Java 类(POJO),该类的属性将映射到您的配置属性。这个类通常被用于存储和操作配置属性的值。确保为属性提供适当的 getter 和 setter 方法。

@ConfigurationProperties(prefix = "myapp")
public class MyAppProperties {
    private String name;
    private String version;
    
    // 省略构造函数、getter 和 setter 方法
}

在上面的示例中, @ConfigurationProperties 注解指定了一个前缀 "myapp",这意味着配置文件中的属性键应以 "myapp" 开头。例如, myapp.name myapp.version

步骤 2: 配置类

接下来,创建一个配置类,用于加载配置属性并将它们绑定到您的 Java POJO 类。通常,这个配置类应该使用 @Configuration 注解进行标记。

import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableConfigurationProperties(MyAppProperties.class)
public class AppConfig 
{
}

@EnableConfigurationProperties 注解用于启用对 MyAppProperties 类的配置属性绑定。

步骤 3: 配置文件

application.properties application.yml 文件中,添加与您的配置属性相关的属性键和值。确保它们以与 @ConfigurationProperties 注解中指定的前缀匹配的方式进行命名。

myapp.name=My Spring Boot App
myapp.version=1.0

或者,使用 YAML 格式:

myapp:
  name: My Spring Boot App
  version: 1.0

步骤 4: 注入配置属性

最后,在您的 Spring Bean 中注入 MyAppProperties 类,以访问配置属性的值。您可以通过构造函数注入或使用 @Autowired 注解进行注入。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MyService {
    private final MyAppProperties myAppProperties;

    @Autowired
    public MyService(MyAppProperties myAppProperties) {
        this.myAppProperties = myAppProperties;
    }

    public void doSomething() {
        String appName = myAppProperties.getName();
        String appVersion = myAppProperties.getVersion();
        
        // 使用配置属性进行操作
        System.out.println("App Name: " + appName);
        System.out.println("App Version: " + appVersion);
    }
}

现在,您的 MyService Bean 可以访问通过 @ConfigurationProperties 注解绑定的配置属性。

通过上述步骤,您可以成功地在 Spring Boot 应用程序中使用 @ConfigurationProperties 注解将配置属性绑定到 Java POJO 类,并将其注入到 Spring Bean 中,以便在应用程序中使用这些属性的值。这种方式使配置属性的管理和使用变得非常方便。

4 @PropertySources的使用

在 Spring Boot 中,通常使用 @PropertySource 注解和 application.properties(或 application.yml)文件来管理应用程序的配置属性。虽然 @PropertySources 注解在标准 Spring 应用程序中更常见,但在 Spring Boot 中,通常使用 @PropertySource 和默认的 application.properties 或 application.yml 更为常见。

不过,我可以提供一个示例,演示如何在 Spring Boot 中使用 @PropertySources 注解来指定多个属性源。

以下是一个示例:

  • 创建一个 Spring Boot 项目。
  • 创建一个配置类,例如 AppConfig.java,并使用 @PropertySources 注解来指定多个属性源。
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.PropertySources;

@Configuration
@PropertySources({
    @PropertySource("classpath:default.properties"), // 默认属性源
    @PropertySource("classpath:custom.properties")  // 自定义属性源
})
public class AppConfig {
}

在上述示例中,我们在 AppConfig 类上使用 @PropertySources 注解,并指定了两个属性源,分别是 default.properties custom.properties 。这两个属性源位于类路径下,可以包含不同的配置属性。

创建属性文件 default.properties custom.properties 并放置在 src/main/resources 目录下。示例 default.properties 文件内容如下:

app.name=My Spring Boot App (Default)
app.version=1.0 (Default)

示例 custom.properties 文件内容如下:

app.name=My Custom Spring Boot App

创建一个服务类,例如 MyService.java,并使用 @Value 注解来注入属性。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class MyService {

    @Value("${app.name}")
    private String appName;

    @Value("${app.version}")
    private String appVersion;

    public String getAppInfo() {
        return "App Name: " + appName + ", App Version: " + appVersion;
    }
}

在上述示例中,我们使用 @Value 注解来注入属性 app.name 和 app.version,这些属性的值将从属性源中获取。

创建一个控制器类,例如 MyController.java,并在其中使用 MyService 来获取属性值并返回给客户端。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    private final MyService myService;

    @Autowired






请到「今天看啥」查看全文