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
来读取环境变量。