如何在 Spring Boot 的配置文件中使用环境变量?

1. 概述

在本教程中,我们将讨论如何在 Spring Boot 的application.propertiesapplication.yml 中使用环境变量。然后,我们将学习如何在代码中引用这些属性。

2. 在application.properties文件中使用环境变量

让我们定义一个名为JAVA_HOME 的全局环境变量,其值为" C:\Program Files\Java\jdk-11.0.14 "。

要在 Spring Boot 的application.properties中使用此变量,我们需要用括号将其括起来:

perl 复制代码
java.home=${JAVA_HOME}

我们也可以以同样的方式使用系统属性。例如,在 Windows 上,默认定义了一个 OS 属性:

perl 复制代码
environment.name=${OS}

也可以组合多个变量值。让我们定义另一个环境变量HELLO_BAELDUNG,其值为" Hello Baeldung "。现在我们可以连接这两个变量:

perl 复制代码
baeldung.presentation=${HELLO_BAELDUNG}. Java is installed in the folder: ${JAVA_HOME}

属性baeldung.presentation 现在包含以下文本:

" Hello Baeldung. Java is installed in the folder: C:\Program Files\Java\jdk-11.0.14 "。

这样,我们的属性根据环境具有不同的值。

3. 在代码中使用我们环境特定的属性

假设我们启动了一个Spring 上下文,我们现在将看到如何将属性值注入到我们的代码中。

3.1. 使用@Value注入值

首先,我们可以使用**@Value**注释。@Value处理setter,构造函数和字段注入:

java 复制代码
@Value("${baeldung.presentation}")
private String baeldungPresentation;

3.2. 从 Spring环境获取

我们还可以通过 Spring 的Environment获取属性的值。我们需要自动装配它:

java 复制代码
@Autowired
private Environment environment;

现在可以通过getProperty()方法检索属性值:

java 复制代码
environment.getProperty("baeldung.presentation")

3.3. 使用@ConfigurationProperties对属性进行分组

如果我们想要将属性组合在一起,@ConfigurationProperties注释非常有用。我们将定义一个组件,它将收集具有给定前缀的所有属性,在我们的例子中是baeldung。然后,我们可以为每个属性定义一个setter。setter的名称是属性名称的其余部分。在我们的例子中,我们只有一个,称为presentation:

java 复制代码
@Component
@ConfigurationProperties(prefix = "baeldung")
public class BaeldungProperties {

    private String presentation;

    public String getPresentation() {
        return presentation;
    }

    public void setPresentation(String presentation) {
        this.presentation = presentation;
    }
}

我们现在可以自动连接BaeldungProperties对象:

java 复制代码
@Autowired
private BaeldungProperties baeldungProperties;

最后,为了获取特定属性的值,我们需要使用相应的 getter:

java 复制代码
baeldungProperties.getPresentation()

4. 在application.yml文件中使用环境变量

和application.properties一样,application.yml是一个配置文件,它定义了应用程序的各种属性和设置。要使用环境变量,我们需要在属性占位符中声明其名称。

让我们看一个带有属性占位符和变量名的示例application.yml文件:

yaml 复制代码
spring:
  datasource:
    url: ${DATABASE_URL}

上面的示例显示我们正在尝试在 Spring Boot 应用程序中导入数据库 URL。${DATABASE_URL}表达式提示 Spring Boot 查找名为DATABASE_URL的环境变量。

要在application.yml中定义环境变量,我们必须以美元符号开头,后跟左花括号、环境变量的名称和右花括号。所有这些组合构成了属性占位符和环境变量名称。

此外,我们可以在代码中使用特定于环境的属性,就像我们对application.properties所做的那样。我们可以使用@Value注释注入值。此外,我们可以使用Environment类。最后,我们可以使用@ConfigurationProperties注释。

5. 结论

在本文中,我们学习了如何根据环境定义具有不同值的属性并在代码中使用它们。此外,我们还了解了如何在application.properties和application.yml文件中定义环境变量。最后,我们查看了将定义的属性注入示例代码的示例。

相关推荐
sg_knight几秒前
RabbitMQ 中的预取值(prefetch)详解:如何真正提升消费端性能?
java·spring boot·spring·spring cloud·消息队列·rabbitmq·预取值
canonical_entropy7 分钟前
API无缝升级方案:从推模式到拉模式的架构演进
后端·restful·graphql
Dxxyyyy10 分钟前
零基础学JAVA--Day34(Map接口+HashTable+HashMap+TreeSet+TreeMap+开发中如何选择集合实现类?(重要))
java·开发语言
摆烂工程师14 分钟前
今天 Cloudflare 全球事故,连 GPT 和你的网站都一起“掉线”了
前端·后端·程序员
追逐时光者42 分钟前
快速构建一个基础、现代化的 WinForm 管理系统
后端·.net
spencer_tseng1 小时前
Tomcat Source Code Distributions
java·tomcat
烤麻辣烫1 小时前
23种设计模式(新手)-5里氏替换原则
java·学习·设计模式·intellij-idea·里氏替换原则
喵手1 小时前
网络编程:Java中的TCP与UDP通信!
java·udp·网络编程·tcp
u***1371 小时前
【SpringBoot】【log】 自定义logback日志配置
java·spring boot·logback
T***u3331 小时前
SpringBoot集成SkyWalking,分布式链路追踪
spring boot·分布式·skywalking