Ich muss unterschiedliche Logik basierend auf unterschiedlichen aktuellen Umgebungsprofilen codieren. Wie können Sie die aktuellen aktiven und Standardprofile von Spring abrufen?
java
spring
spring-profiles
Bobo
quelle
quelle
Antworten:
Sie können das automatisch verdrahten
Environment
Environment
bietet an:String[] getActiveProfiles()
,String[] getDefaultProfiles()
, undboolean acceptsProfiles(String... profiles)
quelle
Erweitern der netten einfachen Antwort von User1648825 (Ich kann keinen Kommentar abgeben und meine Bearbeitung wurde abgelehnt):
Dies kann eine IllegalArgumentException auslösen, wenn keine Profile festgelegt sind (ich erhalte einen Nullwert). Dies kann eine gute Sache sein, wenn Sie es einstellen müssen; Wenn nicht, verwenden Sie die 'Standard'-Syntax für @Value, dh:
... activeProfile enthält jetzt 'Unbekannt', wenn spring.profiles.active nicht aufgelöst werden konnte
quelle
Hier ist ein vollständigeres Beispiel.
Autowire-Umgebung
Zuerst möchten Sie die Umgebungs-Bean automatisch verdrahten.
Überprüfen Sie, ob Profile in aktiven Profilen vorhanden sind
Anschließend können Sie
getActiveProfiles()
herausfinden, ob das Profil in der Liste der aktiven Profile vorhanden ist. Hier ist ein Beispiel, das dasString[]
from verwendetgetActiveProfiles()
, einen Stream von diesem Array abruft und dann Matcher verwendet, um nach mehreren Profilen zu suchen (ohne Berücksichtigung der Groß- und Kleinschreibung), die einen Booleschen Wert zurückgeben, falls vorhanden.Sie können ähnliche Funktionen auch mithilfe der Anmerkungsprofile erzielen, die
@Profile("local")
eine selektive Konfiguration basierend auf einem übergebenen oder Umgebungsparameter ermöglichen. Hier finden Sie weitere Informationen zu dieser Technik: Federprofilequelle
Es funktioniert und Sie müssen EnvironmentAware nicht implementieren. Aber ich kenne keine Nachteile dieses Ansatzes.
quelle
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.profiles.active' in value "${spring.profiles.active}"
@Profile
. Apps können diespring.profiles.include
Eigenschaft auch verwenden und Profile während der Initialisierung mithilfe programmgesteuert festlegenConfigurableEnvironment
.Environment.getActiveProfiles()
Sie erhalten die vollständige Liste der Profile, die mit einem dieser Mechanismen festgelegt wurden.Wenn Sie kein Autowiring verwenden, implementieren Sie es einfach
EnvironmentAware
quelle
Es scheint eine gewisse Nachfrage zu bestehen, um statisch darauf zugreifen zu können.
Es ist ein Hack, aber Sie können Ihre eigene Klasse schreiben, um es aufzudecken. Sie müssen darauf achten, dass nichts aufgerufen wird,
SpringContext.getEnvironment()
bevor alle Beans erstellt wurden, da keine Garantie dafür besteht, wann diese Komponente instanziiert wird.quelle