2016-09-23 5 views
2

Kann spring.profiles.active in application.properties auf einen Wert gesetzt werden, der andere Variablen enthält? Anscheinend kann ich das nicht zur Arbeit bringen. HierEinstellung von spring.profiles.active auf den Wert mit Variablen in application.properties

ist das, was ich will:

one=${APP_ONE:foo} 
two=${APP_TWO:bar} 
spring.profiles.active=${one},${two} 

hier auch die Umgebungsvariablen APP_ONE und APP_TWO interpretiert werden sollte und in spring.profiles.active enden.

Ich möchte dann in applicationContext.xml in einem <beans profile="one"> Tag darauf beziehen können.

Entschuldigung, wenn ich hier nicht klar genug bin, aber ich weiß nicht, wie ich genauer sein soll.

Antwort

1

Es ist möglich. Sie können jedoch die Variable für spring.profiles.active nicht in der gleichen (oder niedrigeren Priorität) der Eigenschaftsquellreihenfolge definieren, in der der Frühling überprüft wird. Die Bestellung wird here erwähnt.

In Ihrem Fall haben Sie versucht, die Variablen "innerhalb" derselben Eigenschaftenquelle zu interpolieren. Sie können es für andere Eigenschaften aber nicht für spring.profiles.active tun, weil es wahrscheinlich zuerst aufgehoben wird, um Frühling zu ermöglichen zu entscheiden, welche anderen profilspezifischen Eigenschaften überprüft werden müssen.

Wenn Sie Ihr application.properties zu

ändern
spring.profiles.active=${APP_ONE:foo},${APP_TWO:bar} 

und dann die APP_ONE, APP_TWO Variable mit einer höheren Eigenschaft Quelle Ordnung (zum Beispiel Befehlszeilenargumente). Es sollte die Profile wie erwartet einstellen.

Ich habe den zweiten Teil Ihrer Frage nicht verstanden, aber wenn Sie wissen wollen, welche Profile aktiv sind, programmgesteuert, können Sie einfach Environment Umgebung und rufen Sie die entsprechenden Methoden.

@Autowired 
Environment env; 

Umwelt hat Methoden wie

String[] getActiveProfiles() 
String[] getDefaultProfiles() //and 
boolean acceptsProfiles(String... profiles) 
Verwandte Themen