基于 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
。