Ich habe ein Frühlingsprojekt, das ein anderes Projekt verwendet. Jedes Projekt verfügt über ein eigenes Federprofil, das mit applicationContext.xml
und *.properties
für jedes Profil aus Java-Code initialisiert wird . Ich injiziere das Profil von args[]
. Das Problem ist, dass das zweite Projekt die Standardkonfiguration für die Umgebung verwendet. applicationContext.xml
Ich kann die Umgebung nicht args[]
in das zweite Projekt einfügen , und ich habe versucht, nach einem Artikel zu suchen, in dem die Funktionsweise des Spring-Profils erläutert wird.
- Gibt es eine Hierarchie, in der das Profil angezeigt wird, wenn die Standardeinstellung nicht konfiguriert ist
applicationContext.xml
? - Ist System var stärker als
applicationContext.xml
Konfiguration? - Was ist Ihrer Meinung nach die beste Lösung für meine Herausforderung?
Artikel zu diesem Thema oder sogar Beispiele wären sehr dankbar !! Danke im Voraus.
java
spring
spring-profiles
user2656851
quelle
quelle
Wenn Sie Ihrer JVM das Spring-Profil zur Verfügung stellen, sollten keine Probleme auftreten:
Siehe auch Frühlingsdokumentation:
http://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html
quelle
Normalerweise konfiguriere ich den applicationContext mithilfe einer auf Anmerkungen basierenden Konfiguration anstelle einer XML-basierten Konfiguration . Jedenfalls glaube ich, dass beide die gleiche Priorität haben .
* Bei der Beantwortung Ihrer Frage hat die Systemvariable eine höhere Priorität *
Profilbasierte Beans aus applicationContext abrufen
Verwenden Sie @Profile für eine Bohne
@Component @Profile("dev") public class DatasourceConfigForDev
Nun ist das Profil
dev
Hinweis: Wenn das Profil als angegeben
@Profile("!dev")
wird, schließt das Profil dev aus und gilt für alle anderen.Verwenden Sie das Profilattribut in XML
<beans profile="dev"> <bean id="DatasourceConfigForDev" class="org.skoolguy.profiles.DatasourceConfigForDev"/> </beans>
Legen Sie den Wert für das Profil fest:
Programmatisch über die WebApplicationInitializer-Schnittstelle
In Webanwendungen kann WebApplicationInitializer verwendet werden, um den ServletContext programmgesteuert zu konfigurieren@Configuration public class MyWebApplicationInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { servletContext.setInitParameter("spring.profiles.active", "dev"); } }
Programmatisch über ConfigurableEnvironment
Sie können Profile auch direkt in der Umgebung festlegen:@Autowired private ConfigurableEnvironment env; // ... env.setActiveProfiles("dev");
Kontextparameter in web.xml
Profile können auch in der Datei web.xml der Webanwendung mithilfe eines Kontextparameters aktiviert werden:<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/app-config.xml</param-value> </context-param> <context-param> <param-name>spring.profiles.active</param-name> <param-value>dev</param-value> </context-param>
JVM-Systemparameter
Die als Parameter übergebenen Profilnamen werden beim Start der Anwendung aktiviert:
In IDEs können Sie die Umgebungsvariablen und -werte festlegen, die beim Ausführen einer Anwendung verwendet werden sollen. Das Folgende ist die Run-Konfiguration in Eclipse:
Umgebungsvariable
über die Kommandozeile einstellen:
export spring_profiles_active=dev
Die Prioritätsreihenfolge lautet:
quelle
Wenn Sie Docker zum Bereitstellen der Spring Boot-App verwenden, können Sie das Profil mithilfe des Flags e festlegen :
quelle
Wenn ich die Befehlszeile
java -Dspring.profiles.active=development -jar yourApplication.jar
ausführe : In meinem Webanwendungsverzeichnis wird angegeben, dass der Pfad falsch ist. Also habe ich das Profil in manualy in der Datei application.properties wie folgt definiert:oder
oder
quelle
Meine Lösung besteht darin, die Umgebungsvariable als festzulegen
spring.profiles.active=development
. Damit alle Anwendungen, die auf diesem Computer ausgeführt werden, auf die Variable verweisen und die Anwendung starten. Die Reihenfolge, in der die Feder eine Eigenschaft wie folgt belastetquelle
Sie können das Federprofil durch Lieferung einstellen
-Dspring.profiles.active=<env>
Für Java-Dateien im Quellverzeichnis (src) können Sie von verwenden
System.getProperty("spring.profiles.active")
Für Java - Dateien in Testverzeichnis können Sie liefern
SPRING_PROFILES_ACTIVE
zu<env>
ODER
Da "Umgebung", "jvmArgs" und "systemProperties" für die Aufgabe "Test" ignoriert werden.
build.gradle
Fügen Sie im Stammverzeichnis eine Aufgabe hinzu, um die jvm-Eigenschaft und die Umgebungsvariable festzulegen.test { def profile = System.properties["spring.profiles.active"] systemProperty "spring.profiles.active",profile environment "SPRING.PROFILES_ACTIVE", profile println "Running ${project} tests with profile: ${profile}" }
quelle