概述

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

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

首先,我们定义一个全局环境变量JAVA_HOME,值为"C:\Program Files\Java\jdk-11.0.14"

要在Spring Boot的application.properties中使用此变量,我们需要用花括号包裹它:

java.home=${JAVA_HOME}

我们也可以以相同的方式使用系统属性。例如,在Windows上,操作系统属性默认定义如下:

environment.name=${OS}

还可以组合多个变量值。定义另一个环境变量HELLO_BAELDUNG,值为"Hello Baeldung"。现在我们可以将两个变量连接起来:

baeldung.presentation=${HELLO_BAELDUNG}. Java is installed in the folder: ${JAVA_HOME}

现在,baeldung.presentation属性包含以下文本:“Hello Baeldung. Java 安装在文件夹:C:\Program Files\Java\jdk-11.0.14”。

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

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

由于我们启动了Spring上下文,接下来我们将了解如何将属性值注入到代码中。

3.1. 使用@Value注解注入值

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

@Value("${baeldung.presentation}")
private String baeldungPresentation;

3.2. 通过Spring的Environment获取值

我们还可以通过Spring的Environment获取属性值。我们需要进行自动注入

@Autowired
private Environment environment;

现在,我们可以使用getProperty()方法获取属性值:

environment.getProperty("baeldung.presentation")

3.3. 使用@ConfigurationProperties分组属性

如果我们想将属性分组在一起,@ConfigurationProperties注解非常有用。我们将定义一个带有特定前缀(在本例中为baeldung)的组件。然后,我们可以为每个属性定义一个setter。setter名称是属性名称的剩余部分。在我们的例子中,我们只有一个名为presentation的setter:

@Component
@ConfigurationProperties(prefix = "baeldung")
public class BaeldungProperties {

    private String presentation;

    public String getPresentation() {
        return presentation;
    }

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

现在我们可以自动注入一个BaeldungProperties对象:

@Autowired
private BaeldungProperties baeldungProperties;

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

baeldungProperties.getPresentation()

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

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

让我们看一个包含属性占位符和变量名称的application.yml示例:

spring:
  datasource:
    url: ${DATABASE_URL}

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

要在application.yml中定义环境变量,必须以美元符号开头,后面跟着一个左花括号,环境变量名称,然后是右花括号。这些组合构成了属性占位符和环境变量名称。

此外,我们也可以像使用application.properties一样,在代码中使用环境特定的属性。我们可以使用@Value注解注入值。同样,我们可以使用Environment类。最后,我们可以使用@ConfigurationProperties注解。

5. 总结

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

如往常一样,代码可在GitHub上找到。