我需要根据当前不同的环境概要文件编写不同的逻辑。

如何从Spring获得当前活动的和默认的概要文件?


当前回答

扩展User1648825的简单回答:

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

如果没有设置概要文件,这可能会抛出IllegalArgumentException(我得到一个空值)。这可能是一件好事,如果你需要它设置;如果@Value不使用“默认”语法,即:

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

...如果spring.profiles.active无法解析,activeProfile现在包含'Unknown'

其他回答

扩展User1648825的简单回答:

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

如果没有设置概要文件,这可能会抛出IllegalArgumentException(我得到一个空值)。这可能是一件好事,如果你需要它设置;如果@Value不使用“默认”语法,即:

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

...如果spring.profiles.active无法解析,activeProfile现在包含'Unknown'

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

它可以工作,而且你不需要实现EnvironmentAware。但我不知道这种方法有什么缺点。

您可以自动装配环境

@Autowired
Environment env;

环境提供了:

String [] getActiveProfiles (), String[] getDefaultProfiles(), and 布尔acceptsProfiles(字符串…配置文件)

如果不使用自动装配,只需实现EnvironmentAware

如前所述。您可以自动装配环境:

@Autowired
private Environment environment;

只有你可以更容易地检查所需的环境:

if (environment.acceptsProfiles(Profiles.of("test"))) {
    doStuffForTestEnv();
} else {
    doStuffForOtherProfiles();
}