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 应用程序的项目结构。
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 文件。
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 是我们的自定义属性,其中包含应用程序名称。
<?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。
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 来读取环境变量。