Spring Boot读取配置文件内容的3种方式(@Value、Environment和@ConfigurationProperties)

当我们开发 Spring Boot 应用时,会遇到读取配置文件的场景,Spring Boot 框架提供了三种读取配置文件的方式,分别是:

  • @Value:通过注解方式读取配置项的值。
  • Environment:通过 Environment 类对象读取配置项的值。
  • @ConfigurationProperties:通过自动映射读取属性文件或 yml 文件中所有以指定前缀开始的配置项。

下面将详细讲解这三种读取配置文件值的方式。

通过 @Value 读取配置项的值

@Value 注解可以用来读取配置文件中的属性值,其使用方式如下:

@Value("${config.property}")
private String configProperty;

在示例代码中,${config.property} 表示需要读取的属性名。其中 ${} 表示 Spring 的 SpEL 表达式,会自动从配置文件中查找相应的属性并进行注入。

例如,假设我们在 application.properties 文件中设置了 config.property=test config property,那么当 Spring Boot 启动后,@Value("${config.property}") 属性注入器会自动读取这个属性值并赋值给 configProperty 变量。

以下是一个使用 @Value 读取默认配置文件的示例代码:

@RestController
@RefreshScope
public class TestController {

    @Value("${config.url}")
    private String url;

    @Value("${config.username}")
    private String username;

    @Value("${config.password}")
    private String password;

    @GetMapping("/config")
    public String getConfig() {
        return "url: " + url + ", username: " + username + ", password: " + password;
    }

}

在代码中,我们使用了 @Value 注解读取 config.propertyconfig.usernameconfig.password 三个属性值,并在 /config 路径上提供了一个 GET 接口,访问该接口时会返回这三个属性值。需要注意的是,这里需要添加 @RefreshScope 注解,这是为了让配置文件的改变可以被实时刷新。

通过 Environment 读取配置项的值

Environment 类提供了一个getProperty方法,可以用来读取指定名称的配置属性。其使用方式如下:

@Autowired
private Environment env;

public String getConfig() {
    String url = env.getProperty("config.url");
    String username = env.getProperty("config.username");
    String password = env.getProperty("config.password");

    return "url: " + url + ", username: " + username + ", password: " + password;
}

在示例代码中,我们先通过 @Autowired 注解自动引入 Environment 对象,然后使用 getProperty 方法来读取 config.urlconfig.usernameconfig.password 这三个配置属性的值。需要注意的是,如果没有配置该属性或该属性值为空,则会返回 null。

以下是一个通过 Environment 读取默认配置文件的示例代码:

@RestController
@RefreshScope
public class TestController {

    @Autowired
    private Environment environment;

    @GetMapping("/config")
    public String getConfig() {
        String url = environment.getProperty("config.url");
        String username = environment.getProperty("config.username");
        String password = environment.getProperty("config.password");
        return "url: " + url + ", username: " + username + ", password: " + password;
    }

}

在代码中,我们使用了 environment.getProperty 方法读取 config.propertyconfig.usernameconfig.password 这三个属性的值,并在 /config 路径上提供了一个 GET 接口,访问该接口时会返回这三个属性值。同样需要添加 @RefreshScope 注解,以便让配置文件的改变可以被实时刷新。

通过 @ConfigurationProperties 读取配置项的值

@ConfigurationProperties 注解可以用于绑定 yml 或 properties 文件中的配置属性,使这些属性可以注入到指定的 Java 对象中。它的使用方式如下:

@Configuration
@ConfigurationProperties(prefix = "config")
public class ConfigProperties {

    private String url;

    private String username;

    private String password;

    // Getter and Setter
}

在示例代码中,@ConfigurationProperties(prefix = "config") 表示需要绑定的配置前缀,即需要读取哪些属性。在这个例子中,我们希望读取 config.urlconfig.usernameconfig.password 这三个属性的值,所以将前缀设置为 config

需要注意的是,类中的属性名称需要和配置文件中的属性名称完全一致。如果配置文件中的属性名为 config.url,那么类中的属性名称也必须是 url

以下是一个使用 @ConfigurationProperties 读取配置文件的示例代码:

@RestController
@RefreshScope
public class TestController {

    @Autowired
    private ConfigProperties config;

    @GetMapping("/config")
    public String getConfig() {
        return "url: " + config.getUrl() + ", username: " + config.getUsername() + ", password: " + config.getPassword();
    }

}

在代码中,我们使用了 @Autowired 注解来自动注入 ConfigProperties 对象,并通过这个对象来读取 config.urlconfig.usernameconfig.password 这三个属性的值。同样需要添加 @RefreshScope 注解,以便让配置文件的改变可以被实时刷新。

以上就是 Spring Boot 读取配置文件内容的 3 种方式:@Value、Environment 和 @ConfigurationProperties 的详细讲解。实际开发中,开发者可以根据自己的具体情况选择最合适的方式来读取配置属性。

阅读剩余 65%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot读取配置文件内容的3种方式(@Value、Environment和@ConfigurationProperties) - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • less的基本用法

    以下是关于“less的基本用法”的完整攻略,过程中包含两个示例。 背景 less是一种Linux/Unix系统下的分页查看器,它可以用于查看文本文件的内容。与cat命令不同,less可以将文本分页显示,方便用户查看大型文本文件。在Linux/Unix系统中,less是一种常常用的工具。 基本用法 在Linux/Unix系统中,使用less非常简单。具体步骤如…

    other 2023年5月9日
    00
  • elasticsearch——分页查询

    以下是关于“Elasticsearch——分页查询”的完整攻略,包括基本概念、查询方式、示例说明和注意事项。 基本概念 Elasticsearch是一基于Lucene的分布式搜索引擎,可以快速地存储、搜索和分析大量数据。分页查询是Elasticsearch中常用查询方式之一,可以将查询结果分页展示,提高用户体验。 查询方式 Elasticsearch中分页查…

    other 2023年5月7日
    00
  • Lua字符串库(string库)学习笔记

    Lua字符串库(string库)学习笔记 Lua字符串是像其他编程语言中字符串一样的不可变的序列。Lua提供了强大的字符串操作方法来帮助我们对字符串进行处理。本篇笔记将详细讲解Lua字符串库(string库)的常用方法。 Lua字符串的基本操作 字符串长度 字符串长度用 # 进行求值,例如: local str = "hello world&quo…

    other 2023年6月20日
    00
  • 【历史】-windowsnt之父-davidcutler

    以下是详细讲解“【历史】Windows NT之父David Cutler的完整攻略,过程中至少包含两条示例说明”的Markdown格式文本: 【历史】Windows NT之父David Cutler David Cutler是一位计算机科学家,被誉为Windows NT操作系统的创造者和主要开发者。本攻略将介绍David Cutler的生平和Windows …

    other 2023年5月10日
    00
  • c语言基于stdarg.h的可变参数函数的用法

    C语言基于stdarg.h的可变参数函数的用法 在C语言中,我们可以使用可变参数函数来传递数量不确定的参数。这种函数通常用于需要处理不同数量参数的情况,例如输出不同个数的数字或字符串等。在实现可变参数函数时,需要使用头文件stdarg.h,并调用其中的函数和宏来实现参数的获取和处理。 可变参数函数的定义 以下是可变参数函数的基本模板: #include &l…

    other 2023年6月26日
    00
  • awkprintf输出格式判断

    awk printf 输出格式判断攻略 在 awk 中,printf 函数可以用于格式化输出。在输出时,我们可以使用格式化字符串来指定输出的格式。本文将介绍 awk printf 输出格式判断的攻略,包括基本概念、应用场景、实现方法示例说明。 基本概念 awk 是一种文本处理工具,可以用于处理文本文件中的数据。在 awk,printf 函数可以于格式化输出。…

    other 2023年5月7日
    00
  • python3中类的继承以及self和super的区别详解

    下面是 “Python3中类的继承以及self和super的区别详解” 的完整攻略。 类的继承 在Python3中,类的继承是通过在类定义时指定父类实现的,例如: class Animal: def __init__(self, name): self.name = name class Dog(Animal): def __init__(self, nam…

    other 2023年6月26日
    00
  • React生命周期函数图解介绍

    下面是详细讲解 “React生命周期函数图解介绍”的完整攻略及示例说明。 1. React生命周期概述 React组件的生命周期是指组件从创建到卸载的整个过程中所经历的一系列阶段,每个阶段都具有相应的生命周期函数,这些生命周期函数可以被称为钩子函数。 React 生命周期分为三大部分 1.1 组件挂载阶段(Mounting) 组件实例被创建并插入 DOM 中…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部