在 Spring Boot Properties/Yaml 文件中使用环境变量

1、概览

本文介绍了如何在 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}

也可以以同样的方式使用系统属性(System Properties)。例如,在 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 is installed in the folder: C:\Program Files\Java\jdk-11.0.14.

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

启动 Spring Context 后,就可以在代码中注入属性值。

3.1、使用 @Value 注入属性值

可以使用 @Value 注解在 setter 方法、构造器和字段上进行注入:

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

3.2、从 Spring Environment 获取值

还可以通过 Spring 的 Environment 获取属性值。

注入 Environment

@Autowired
private Environment environment;

通过 getProperty() 方法来检索属性。

environment.getProperty("baeldung.presentation")

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

@ConfigurationProperties 注解可用于属性分组。定义一个组件,用于配置有指定前缀的属性,在本例中是 baeldung。然后,可以为每个属性定义一个 setter。setter 的名称就是属性名称的其余部分。在本例中,只有一个叫做 presentation 的属性:

@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 也是一个配置文件,用于定义应用的各种属性和设置。要使用环境变量,需要在属性占位符中声明其名称。

如下:

spring:
  datasource:
    url: ${DATABASE_URL}

如上,${DATABASE_URL} 表达式会查找名称为 DATABASE_URL 的环境变量。

要在 application.yml 中定义环境变量,必须以美元符号开头,然后是开头大括号、环境变量名称和结尾大括号。所有这些组合构成了属性占位符和环境变量名称。

此外,也可以在代码中使用特定环境属性,和 application.properties 一样。


参考:https://1111www.baeldung.com/spring-boot-properties-env-variables