Spring Boot 教程

Spring Boot 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/spring_boot-get-current-env-info.html

spring boot 在程序代码层面获取当前环境信息的方法

Spring Boot 笔记 Spring Boot 笔记


基于 Spring 框架或 Spring Boot 的项目中,需要根据当前环境的不同在代码上实现不同的逻辑,那如何获取当前环境信息。

实现方式

spring 项目一般通过启动参数中,指定 spring.profiles.active 为对应的环境信息,那代码中,获取 spring.profiles.active 即可知晓当前所处的环境。

spring 在容器中实例化一个 Environment 对象,该对象含有包含 spring.profiles.active 等的环境信息,项目中可以创建一个环境信息的管理器,然后在使用处调用管理类的封装方法即可。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

/**
 * spring 环境信息管理器
 **/
@Component
public class SpringEnvironmentManager {

    @Autowired
    private Environment env;

    public Environment getEnv() {
        return env;
    }
}

如下,在具体使用示例: 

        Environment environment = springEnvironmentManager.getEnv();
        String[] activeProfiles = environment.getActiveProfiles();
        if (ArrayUtils.isNotEmpty(activeProfiles)) {
            if ("prod".equals(activeProfiles[0])) {
                // todo
            } else if ("staging".equals(activeProfiles[0])) {
                // todo
            } else if ("test".equals(activeProfiles[0])) {
                // todo
            } else if ("dev".equals(activeProfiles[0])) {
                // todo
            } else {
                // todo
            }
        }

还有另一种方式是直接注入 spring.profiles.active 信息,具体示例如下:

    @Value("${spring.profiles.active:Unknown}")
    private String profiles;

这里设置了一个默认值 Unknown,是因为如果程序没有设置 spring.profiles.active 的话,会抛出 IllegalArgumentException