ZetCode

Spring Boot 环境

最后修改于 2023 年 7 月 16 日

Spring Boot 环境展示了如何在 Spring Boot 中读取环境变量。Spring Boot 应用程序可以在各种环境中部署,在这种情况下,读取环境变量会很有帮助。

Spring 是一个流行的 Java 应用程序框架,而 Spring Boot 是 Spring 的下一步演进,它有助于以最小的努力创建独立的、生产级的基于 Spring 的应用程序。

Environment 是一个表示当前应用程序运行环境的接口。它可用于获取应用程序环境的配置和属性。

$ echo $JAVA_HOME
/home/jano/.jdks/corretto-17.0.3

在本示例中,我们定义了一个 JAVA_HOME 环境变量。

build.gradle
...
src
├── main
│   ├── java
│   │   └── com
│   │       └── zetcode
│   │           └── Application.java
│   └── resources
│       ├── application.properties
│       └── logback.xml
└── test
    ├── java
    └── resources

这是 Spring Boot 应用程序的项目结构。

build.gradle
plugins {
    id 'org.springframework.boot' version '3.1.1'
    id 'io.spring.dependency-management' version '1.1.0'
    id 'java'
}

group = 'com.zetcode'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
}

这是 Gradle 构建文件。spring-boot-starter 是核心启动器,包括自动配置支持、日志记录和 YAML。应用程序被打包成一个 JAR 文件。

resources/application.properties
spring.main.banner-mode=off
spring.output.ansi.enabled=ALWAYS
logging.pattern.console=%clr(%d{yy-MM-dd E HH:mm:ss.SSS}){blue} %clr(%-5p) %clr(%logger{0}){blue} %clr(%m){faint}%n

app.name=MyApp

application.properties 文件包含应用程序配置设置。Spring 有一些内置的应用程序属性,我们可以创建自定义属性。spring.main.banner-mode 属性是 Spring 的内置属性;我们关闭 Spring 的横幅。接下来的两行使用颜色支持设置日志记录。app.name 是我们的自定义属性,其中包含应用程序名称。

resources/logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <logger name="org.springframework" level="ERROR"/>
    <logger name="com.zetcode" level="INFO"/>
</configuration>

应用程序日志记录配置在 logback.xml 文件中。我们设置日志记录级别。我们不希望输出被不必要的消息所干扰。spring-boot-starter 依赖项为日志记录启用了 logback。

com/zetcode/Application.java
package com.zetcode;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.env.Environment;

@SpringBootApplication
public class Application implements CommandLineRunner {

    private static final Logger logger = LoggerFactory.getLogger(Application.class);

    private final Environment env;

    public Application(Environment env) {
        this.env = env;
    }

    @Override
    public void run(String... args) throws Exception {

        logger.info("{}", env.getProperty("JAVA_HOME"));
        logger.info("{}", env.getProperty("app.name"));
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

Application 中,我们创建一个 bean,调用其方法,并设置 Spring Boot 应用程序。CommandLineRunner 接口表明当一个 bean 包含在 SpringApplication 中时应该运行。它可用于在 Spring Boot 中创建命令行应用程序。

@SpringBootApplication
public class Application implements CommandLineRunner {

@SpringBootApplication 注解启用自动配置和组件扫描。

private final Environment env;

public Application(Environment env) {
    this.env = env;
}

我们注入 Environment 以获取属性。

logger.info("{}", env.getProperty("JAVA_HOME"));

在这里,我们检索 JAVA_HOME 环境变量。

logger.info("{}", env.getProperty("app.name"));

Environment 也可以用来从 application.properties 文件中获取属性:获取 app.name 属性。

$ ./gradlew bootRun
...
22-05-19 Thu 11:03:03.217 INFO  Application /home/jano/.jdks/corretto-17.0.3
22-05-19 Thu 11:03:03.218 INFO  Application MyApp

我们运行应用程序。

在本文中,我们使用 Spring Environment 来读取环境变量。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。到目前为止,我撰写了超过 1,400 篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出 所有 Spring Boot 教程