Spring-Boot-Umgebung-spezifische Konfigurationen
Ich habe eine spring-boot-Anwendung, die verwendet die Aktor, auto-Konfiguration und JPA. Ich möchte in der Lage sein, um die Verwendung einer in-memory-DB in meine test Profil, eine MySQL-DB-Konfiguration während Entwicklung und eine separate Produktion DB-Konfiguration, wenn die app im Einsatz in der Produktion. Vermutlich aus der java-Befehlszeile sollte ich in der Lage, um anzugeben, die Umgebung und die richtige Konfiguration-Datei oder config-block in Anwendung.Eigenschaften (oder .yml) abgeholt werden.
Ich habe nicht gefunden, einen guten Beitrag mit einem Beispiel zu beschreiben, wie dazu schalten, so dass ich dachte, ich würde Fragen, ob jemand hier ein gutes Beispiel. Mein Hauptziel ist es, die pre-definieren Sie die spring.datasource
und spring.jpa
Eigenschaften zu erstellen und dann zur Laufzeit wechseln, die app-config-pro Umwelt "dynamisch" mit dem java-command-line-argument. Sekundäres Ziel wäre, das gleiche zu tun mit der management
Konfigurationen, etc.
Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dank @Richard für die Erwähnung von
spring.profiles.active
JVM variable an. Da meine Frage war spezifisch für die Art und Weise Spring Boot tut dies, und da gibt es viel mehr um die Antwort, ich bin geneigt, diese zu beantworten mich, und umfassen alle details, wie kam ich auf die Antwort, in der Hoffnung, dass es andere Zeit.Ersten, können Sie tatsächlich wählen Sie das richtige Profil auf der
java
Befehlszeile hinzufügen-Dspring.profiles.active=profile_name
wenn Sie mit Ihrem Spring-Boot-app. (dies wird vorausgesetzt Ihre Bereitstellung bevorzugt ist eine uber Glas mit eingebetteten container - Tomcat in meinem Fall)Ich wollte gehen, MySQL datasource-Konfigurationen unter die Standard Profil und setzen H2 in-memory-datasource-Konfiguration unter einem test Profil. Jedoch, die Art, wie Spring Boot nimmt die richtigen datasource basierend auf dem Profil ist nicht so offensichtlich. Obwohl ich MySQL-Daten unter der Standard Profil und ich hatte die in-memory-H2-Datenquelle unter details in der test Profil, wäre es immer noch pick H2 als Datenquelle auch wenn
spring.profiles.active
wurde ausgelassen, von der Befehlszeile aus. Dieser war entgegen meiner Annahme, dass Standard Profil ausgewählt werden, sowie, standardmäßig 🙂Ich endete, dass die H2-Konfiguration unter dem Standard Profil und erstellen Sie dann eine lokalen - Profil enthalten, dass die MySQL datasource-Konfiguration. Hier ist, was ich am Ende mit meiner
application.yml
Funktioniert hat. Ich war in der Lage, zum wechseln zwischen Standard profile und die lokalen Profil durch weglassen oder hinzufügen der
-Dspring.profiles.active=local
auf diejava
Befehlszeile. Da test-Profil erbt vom default ist es auch mit H2Eine weitere nuance: ich Hinzugefügt
ddl-auto: create-drop
zu den test, welches Profil verwendet die in-memory-DB zur Erleichterung der automatischen Erstellung der Tabelle /teardown für unit-tests. Aber für das lokale Profil verwendet MySQL habe ich es geändertupdate
. Impliziert, dass für das lokale Profil muss ich zuerst erstellen Sie die Datenbank außerhalb der Anwendung.mvn spring-boot:run -Drun.arguments="--spring.profiles.active=myProfile" -Dsome.other.application.property=x
dieser Artikel zeigt, wie Sie mit Feder-profile, verfügbar in spring 3.1 und höher. Es wird genau das tun, was Sie wollen.
http://chariotsolutions.com/blog/post/spring-3-1-environment-profiles-2/
legen Sie ein JVM-Variablen wie diese: Frühling.profile.active=Entwicklung
dann in Ihrer Konfigurations-xml-Datei können Sie wrap der Umgebung von xml mit der Profil-tags
Sie können auch festlegen, dass das Profil auf annotation-driven-Klassen mit @Profil("Entwicklung") am Anfang der Klasse. Diese Klasse wird nur autowired wenn das Profil passt.
Für unit-tests Sie können das aktive Profil auf eine test-Klasse mit @ActiveProfile(profile = "test", "CI"), läuft es mit test-und CI-Ressourcen