我需要根据当前不同的环境概要文件编写不同的逻辑。
如何从Spring获得当前活动的和默认的概要文件?
我需要根据当前不同的环境概要文件编写不同的逻辑。
如何从Spring获得当前活动的和默认的概要文件?
当前回答
如果你既不想使用@Autowire也不想注入@Value,你可以简单地这样做(包括回退):
System.getProperty("spring.profiles.active", "unknown");
这将返回任何活动的配置文件(或回退到'unknown')。
其他回答
似乎有一些需求,能够访问这个静态。
我如何在非spring-managed的静态方法中获得这样的东西 课吗?——Aetherus
这是一种hack,但是您可以编写自己的类来公开它。您必须小心确保在创建所有bean之前没有任何东西会调用springcontext . getenvirenvironment(),因为不能保证什么时候实例化这个组件。
@Component
public class SpringContext
{
private static Environment environment;
public SpringContext(Environment environment) {
SpringContext.environment = environment;
}
public static Environment getEnvironment() {
if (environment == null) {
throw new RuntimeException("Environment has not been set yet");
}
return environment;
}
}
@Value("${spring.profiles.active}")
private String activeProfile;
它可以工作,而且你不需要实现EnvironmentAware。但我不知道这种方法有什么缺点。
如果不使用自动装配,只需实现EnvironmentAware
您可以自动装配环境
@Autowired
Environment env;
环境提供了:
String [] getActiveProfiles (), String[] getDefaultProfiles(), and 布尔acceptsProfiles(字符串…配置文件)
扩展User1648825的简单回答:
@Value("${spring.profiles.active}")
private String activeProfile;
如果没有设置概要文件,这可能会抛出IllegalArgumentException(我得到一个空值)。这可能是一件好事,如果你需要它设置;如果@Value不使用“默认”语法,即:
@Value("${spring.profiles.active:Unknown}")
private String activeProfile;
...如果spring.profiles.active无法解析,activeProfile现在包含'Unknown'