如何在Spring中以编程方式获取当前的活动/默认环境configuration文件?

我需要根据不同的当前环境configuration文件编写不同的逻辑。 你怎么能从Spring获得当前的活动和默认configuration文件?

您可以自动连接环境

@Autowired Environment env; 

环境提供String[] getActiveProfiles()String[] getDefaultProfiles()boolean acceptsProfiles(String... profiles)

如果你不使用自动assembly,只需实现EnvironmentAware

这是一个更完整的例子。

Autowire环境

首先你需要自动装载环境bean。

 @Autowired private Environment environment; 

检查活动configuration文件是否存在configuration文件

然后,您可以使用getActiveProfiles()来查找configuration文件是否存在于活动configuration文件列表中。 这是一个从getActiveProfiles()获取String[]的示例,从该数组获取stream,然后使用匹配器检查多个configuration文件(不区分大小写),如果它们存在,则返回布尔值。

 //Check if Active profiles contains "local" or "test" if(Arrays.stream(environment.getActiveProfiles()).anyMatch( env -> (env.equalsIgnoreCase("test") || env.equalsIgnoreCase("local")) )) { doSomethingForLocalOrTest(); } //Check if Active profiles contains "prod" else if(Arrays.stream(environment.getActiveProfiles()).anyMatch( env -> (env.equalsIgnoreCase("prod")) )) { doSomethingForProd(); } 

你也可以使用注解@Profile("local")实现类似的function。下面是关于这种技术的更多信息: Spring Profiles

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

它的工作原理,你不需要实现EnvironmentAware。 但是我不知道这个方法的缺点。