java - borderfactory - ¿Cómo se obtiene el perfil de entorno actual activo/predeterminado programáticamente en primavera?
spring spring-profiles (5)
Aquí hay un ejemplo más completo.
Entorno de Autowire
Primero querrá conectar automáticamente el bean de entorno.
@Autowired
private Environment environment;
Compruebe si los perfiles existen en los perfiles activos
Luego puede usar getActiveProfiles()
para averiguar si el perfil existe en la lista de perfiles activos. Aquí hay un ejemplo que toma el String[]
de getActiveProfiles()
, obtiene un stream de ese array, luego usa los matchers para verificar múltiples perfiles (no distingue entre mayúsculas y minúsculas) que devuelve un booleano si existen.
//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();
}
También puede lograr una funcionalidad similar con la anotación @Profile("local")
Aquí hay más información sobre esta técnica: Spring Profiles
Necesito codificar una lógica diferente en función de diferentes perfiles de entorno actuales. ¿Cómo puede obtener los perfiles actuales activos y predeterminados de Spring?
Extendiendo la respuesta simple y agradable del usuario1648825 (no puedo comentar y mi edición fue rechazada):
@Value("${spring.profiles.active}")
private String activeProfile;
Esto puede arrojar una IllegalArgumentException si no se establecen perfiles (obtengo un valor nulo). Esto puede ser una buena cosa si necesita que se establezca; si no, use la sintaxis ''predeterminada'' para @Value, es decir:
@Value("${spring.profiles.active:Unknown}")
private String activeProfile;
... activeProfile ahora contiene ''Desconocido'' si spring.profiles.active no se pudo resolver
Puedes autoconectar el entorno
@Autowired
Environment env;
El entorno ofrece String[] getActiveProfiles()
, String[] getDefaultProfiles()
, y boolean acceptsProfiles(String... profiles)
Si no está utilizando el autocableado, simplemente implemente EnvironmentAware
@Value("${spring.profiles.active}")
private String activeProfile;
Funciona y no necesita implementar EnvironmentAware. Pero no conozco los inconvenientes de este enfoque.