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 的详细讲解。实际开发中,开发者可以根据自己的具体情况选择最合适的方式来读取配置属性。

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

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

相关文章

  • 在 Vue 中使用 iframe 嵌套页面的步骤

    当在Vue中使用iframe嵌套页面时,可以按照以下步骤进行操作: 在Vue组件中添加iframe元素:在Vue组件的模板中,使用<iframe>标签添加一个iframe元素。可以通过设置src属性来指定要嵌套的页面的URL。 示例代码: <template> <div> <h1>主页面</h1> …

    other 2023年7月27日
    00
  • AMD新处理器R5-3600XT/R7-3800XT/R9-3900XT区别对比评测

    AMD新处理器R5-3600XT/R7-3800XT/R9-3900XT区别对比评测攻略 简介 AMD最新推出的Ryzen 3000 XT系列处理器包括R5-3600XT、R7-3800XT和R9-3900XT。这些处理器是基于Zen 2架构的改进版本,旨在提供更高的性能和更好的游戏体验。本文将详细讲解这三款处理器的区别,并进行对比评测。 1. R5-360…

    other 2023年8月6日
    00
  • C++中的STL中map用法详解(零基础入门)

    C++中的STL中map用法详解(零基础入门) 什么是map? map 是 C++ 中的关联式容器,它可以存储 key-value 键值对,其中 key 是唯一的。在 map 中,key 和 value 可以是任何可比较的数据类型。 map 可以用于快速查找和插入数据。其内部实现是基于红黑树(一种自平衡的二叉查找树)的。 map的基本用法 map 定义格式:…

    other 2023年6月26日
    00
  • mybatis多层嵌套resultMap及返回自定义参数详解

    MyBatis多层嵌套ResultMap及返回自定义参数详解攻略 在使用MyBatis进行数据库操作时,有时候需要进行多表关联查询,并将结果映射到一个复杂的对象中。MyBatis提供了多层嵌套ResultMap的功能,可以方便地处理这种情况。同时,我们也可以返回自定义参数,以满足特定的业务需求。 1. 多层嵌套ResultMap 多层嵌套ResultMap允…

    other 2023年7月28日
    00
  • mavenrepository库

    以下是关于Maven Repository库的完整攻略: 什么是Maven Repository库? Maven Repository库是一个用于存储和共享Java项目依赖项的中央存储库。它包含了大量的Java库和框架,可以通过Maven或Gradle等构建工具来访问和使用。 如何使用Maven Repository库? 以下是使用Maven Reposit…

    other 2023年5月6日
    00
  • html5 video标签屏蔽右键视频另存为的js代码

    要实现html5 video标签屏蔽右键视频另存为,我们可以使用Javascript代码来解决。具体的实现过程如下: 1. 创建一个video标签 首先,我们需要在HTML中创建一个video标签,并指定要加载的视频文件路径。 <video id="myVideo" controls preload="metadata&q…

    other 2023年6月27日
    00
  • win7鼠标右键菜单如何删除呢?

    要删除Win7鼠标右键菜单,可以通过以下步骤进行操作: 1. 打开注册表编辑器 按下“Win + R”键,弹出运行窗口,输入“regedit”并回车打开注册表编辑器。 2. 定位到需要删除的项 在注册表编辑器中定位到需要删除的右键菜单,通常情况下,它们都位于以下路径: HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandle…

    other 2023年6月27日
    00
  • 英特尔迅驰4无线技术解析

    很抱歉,作为文本模型,我无法以标准的markdown格式回答您的问题。但是,我可以为您提供一份详细的攻略,包含英特尔迅驰4无线技术的解析,并提供两个示例说明。 英特尔迅驰4无线技术解析 英特尔迅驰4无线技术是英特尔公司推出的一项无线通信技术,旨在提供更快速、更稳定的无线网络连接。以下是对该技术的详细解析: 技术原理 英特尔迅驰4无线技术基于802.11ac标…

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