2013-04-04 9 views
41

Ich habe zwei Federprofile: "dev" und "test". Ich möchte das aktive Profil in der Serverumgebung festlegen, ich möchte es nicht in meinem Code festlegen, sodass das Profil, wo immer ich meine Anwendung ausliege, basierend auf dem Profil auf dem Server geladen wird. Wie kann ich das machen?Einstellung der Federprofilvariable

Antwort

70

Sie können einfach eine Systemeigenschaft auf dem Server wie folgt ...

-Dspring.profiles.active=test 

Edit: dies in Eclipse zu tomcat hinzuzufügen, wählen Sie Run -> Run Configurations und Tomcat laufen Konfiguration wählen. Klicken Sie auf die Registerkarte Arguments und fügen Sie -Despring.profiles.active = test am Ende von VM arguments hinzu. Eine andere Möglichkeit wäre es, die Eigenschaft auf Ihre catalina.properties in Ihrem Servers Projekt hinzuzufügen, aber wenn Sie es hinzufügen, dass es unterlassen, die -D

Edit: Für den Einsatz mit Frühling Stiefel, haben Sie eine zusätzliche Wahl. Sie können die Eigenschaft als Programmargument übergeben, wenn Sie der Eigenschaft zwei Bindestriche voranstellen.

Hier sind zwei Beispiele einer Feder Boot-ausführbare jar-Datei mit ...

Systemeigenschaft

[[email protected] ~]$ java -jar -Dspring.profiles.active=test myproject.jar 

Programm Argument

[[email protected] ~]$ java -jar myproject.jar --spring.profiles.active=test 
+1

Ich bin neu in Spring Profilen. "ON THE SERVER". Wo und wie genau muss ich es einstellen? –

+0

Noch eine Sache ist, dass ich Tomcat durch Eclipse und nicht durch die Befehlszeile starte. –

+3

Welchen Server benutzen Sie? Wenn Sie Tomcat verwenden, können Sie dies zu $ ​​CATALINA_HOME/conf/catalina.properties hinzufügen, aber das -D weglassen, sodass Sie einfach spring.profiles.active = test – hyness

17

Es gibt mindestens zwei Möglichkeiten, um das zu tun:

  1. Definition Kontextparam in web.xml - das bricht "ein Paket für alle Umgebungen" Anweisung. Ich empfehle nicht, dass

  2. definieren Systemeigenschaft -Dspring.profiles.active=your-active-profile

Ich glaube, dass ein viel besserer Ansatz zu definieren Systemeigenschaft ist. Wie definiert man die Systemeigenschaft für Tomcat? Im Internet könnte ich eine Menge Ratschläge wie "catalina.sh ändern" finden, weil Sie keine Konfigurationsdatei finden, um solche Sachen zu machen. Das Ändern von catalina.sh ist eine schmutzige, nicht zu behebende Lösung. Es gibt einen besseren Weg, das zu tun.

Gerade Datei setenv.sh in Tomcat-bin-Verzeichnis mit Inhalt erstellen:

JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=dev" 

und es wird automatisch catalina.sh starten oder laufen während des Fahrens geladen werden.

Here is a blog beschreibt die obige Lösung. Der Kommentarbereich ist interessant, da er mehr Details enthält.

+4

Für Windows verwenden Sie JAVA_OPTS =% JAVA_OPTS% -Dspring.profiles.active = dev (keine Anführungszeichen) – ThomasRS

+1

Ich denke, es ist besser, CATALINA_OPTS zu verwenden, siehe: http://stackoverflow.com/questions/7738794/add-jvm-options -in-tomcat –

+0

Der obige Link ist tot. – pramodc84

1

als Systemumgebung Variable:

Fenster: Start -> Typ "envi" Umgebungsvariablen auswählen und fügen Sie eine neue: Name: spring_profiles_active Value: dev (oder was auch immer dein ist)

Linux: Fügen Sie folgende Zeile zu/etc/environment unter Pfad:

spring_profiles_active=prod (oder was auch immer Profil ist)

dann auch export spring_profiles_active=prod also hast du es jetzt in der Laufzeit.

+0

Dies funktioniert hervorragend (getestet in Windows), auch wenn Sie Ihre Anwendung in einem OSGI-Container ausführen. Denken Sie daran, die JVA-Instanz nach dem Festlegen neu zu starten, und stellen Sie sicher, dass die Systemeigenschaft mit dem Namen "spring.profiles.active" deaktiviert ist. Zu Ihrer Information: Dies setzt nicht die Systemeigenschaft, sondern das Spring Environment-Instanzprofil. Vielen Dank! –

Verwandte Themen