如何在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。 但是我不知道这个方法的缺点。