我需要根据当前不同的环境概要文件编写不同的逻辑。
如何从Spring获得当前活动的和默认的概要文件?
我需要根据当前不同的环境概要文件编写不同的逻辑。
如何从Spring获得当前活动的和默认的概要文件?
当前回答
扩展User1648825的简单回答:
@Value("${spring.profiles.active}")
private String activeProfile;
如果没有设置概要文件,这可能会抛出IllegalArgumentException(我得到一个空值)。这可能是一件好事,如果你需要它设置;如果@Value不使用“默认”语法,即:
@Value("${spring.profiles.active:Unknown}")
private String activeProfile;
...如果spring.profiles.active无法解析,activeProfile现在包含'Unknown'
其他回答
下面是一个更完整的例子。
自动装配环境
首先,您需要自动装配环境bean。
@Autowired
private Environment environment;
检查活动配置文件中是否存在配置文件
然后您可以使用getActiveProfiles()来查找该概要文件是否存在于活动概要文件列表中。下面是一个例子,从getActiveProfiles()中获取String[],从该数组中获取流,然后使用匹配器检查多个概要文件(不区分大小写),如果它们存在,则返回一个布尔值。
//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”)实现类似的功能。Profiles允许基于传入的或环境参数进行选择性配置。下面是关于这项技术的更多信息:Spring Profiles
@Value("${spring.profiles.active}")
private String activeProfile;
它可以工作,而且你不需要实现EnvironmentAware。但我不知道这种方法有什么缺点。
扩展User1648825的简单回答:
@Value("${spring.profiles.active}")
private String activeProfile;
如果没有设置概要文件,这可能会抛出IllegalArgumentException(我得到一个空值)。这可能是一件好事,如果你需要它设置;如果@Value不使用“默认”语法,即:
@Value("${spring.profiles.active:Unknown}")
private String activeProfile;
...如果spring.profiles.active无法解析,activeProfile现在包含'Unknown'
如果你既不想使用@Autowire也不想注入@Value,你可以简单地这样做(包括回退):
System.getProperty("spring.profiles.active", "unknown");
这将返回任何活动的配置文件(或回退到'unknown')。
您可以自动装配环境
@Autowired
Environment env;
环境提供了:
String [] getActiveProfiles (), String[] getDefaultProfiles(), and 布尔acceptsProfiles(字符串…配置文件)