Devo codificare una logica diversa in base al diverso profilo Ambiente corrente. Come si ottengono i profili attivi e predefiniti correnti da Spring?Come si ottiene il profilo ambientale attivo/predefinito corrente in primavera?
risposta
È possibile autowire dell'Ambiente
@Autowired
Environment env;
ambiente offre String[] getActiveProfiles()
, String[] getDefaultProfiles()
, e boolean acceptsProfiles(String... profiles)
Funziona anche con '@ Resource' (Spring 4.2) –
Se non si utilizza autowiring, è sufficiente implementare EnvironmentAware
Ecco un esempio più completo.
Autowire Ambiente
In primo luogo si vorrà autowire il fagiolo ambiente.
@Autowired
private Environment environment;
Verificare se i profili esistono in Profili attivi
Quindi è possibile utilizzare getActiveProfiles()
per scoprire se il profilo esiste nell'elenco dei profili attivi. Ecco un esempio che prende lo String[]
da getActiveProfiles()
, riceve uno stream da quell'array, quindi utilizza i parametri di corrispondenza per verificare più profili (maiuscole e minuscole) che restituisce un valore booleano se esiste.
//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();
}
È inoltre possibile ottenere simili utilizzo funzionalità di annotazione @Profile("local")
Ecco ulteriori informazioni su questa tecnica: Spring Profiles
@Profile sembra la soluzione migliore. –
@Value("${spring.profiles.active}")
private String activeProfile;
Funziona e non è necessario implementare EnvironmentAware. Ma non conosco gli svantaggi di questo approccio.
Questa riga fornisce questo errore: 'Causato da: java.lang.IllegalArgumentException: Impossibile risolvere il segnaposto 'spring.profiles.active' nel valore" $ {spring.profiles.active} "' – zygimantus
Estendere bella risposta semplice di User1648825 (non posso commentare e mia modifica è stata respinta):
@Value("${spring.profiles.active}")
private String activeProfile;
Questo potrebbe generare un IllegalArgumentException se sono impostate alcun profilo (ottengo un valore nullo). Questa potrebbe essere una buona cosa se ne hai bisogno; se non utilizzare la sintassi di 'default' per @value, vale a dire:
@Value("${spring.profiles.active:Unknown}")
private String activeProfile;
... activeProfile ora contiene 'Unknown' se spring.profiles.active non può essere risolto
avete bisogno di più dettagli di quello. – aweigold
@aweigold: richiama automaticamente il profilo ambiente attivo/predefinito in primavera 3.1. quali ulteriori dettagli hai bisogno? – Bobo
Ho offerto una modifica ... Non ho i diritti di modifica completa, annullerò il mio voto quando posso. – aweigold