概述
本教程将讨论如何在Spring Boot的application.properties
和application.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.properties
和application.yml
文件中定义环境变量。最后,我们查看了如何将定义的属性注入到示例代码中的实例。
如往常一样,代码可在GitHub上找到。