2017-05-24 2 views
0

Ich möchte meine Config-Dateien vollständig externalisieren, so dass jede * .properties-Datei in/etc/foo /.Springboot @PropertySource mit --spring.config.location =/etc/foo/

Aber ich will nicht alles in einer großen application.properties, also teile ich bestimmte Teile in einzelne * .properties Dateien auf.

Wie kann ich @PropertySource mitteilen, dass es den Speicherort der angegebenen Eigenschaftendatei genauso auflösen soll wie für seine application.properties, dh suche in jedem direkt (könnte mehrere sein), den ich mit "-" angegeben habe - spring.config.location "?

Meine Klasse würde auf diese Weise ideal aussehen:

@Configuration 
@PropertySource("dpuProfiles.properties") 
@ConfigurationProperties("dpu.profiles") 
public class DpuProfilesConfiguration { 
... 
} 

Es funktioniert, wenn ich explizit angeben "file: /etc/foo/dpuProfiles.properties". Ich konnte nicht "$ {spring.config.location} /dpuProfiles.properties" oder ähnliche Ersetzung mit EL arbeiten. Macht wahrscheinlich auch keinen Sinn, da die Variable mehrere Verzeichnisse enthalten könnte.

Antwort

1

Sie können es durch die die config (s) Verzeichnis in Ihrem -classpath angeben und von Classpath verweisen auf Ihre @PropertySource

Für Ihren Fall wird es

CLASSPATH=just_added_as_an_example_jar.jar:/etc/foo/ 
-classpath "$CLASSPATH" 

Aber Sie müssen ändern der @PropertySource Wert wie folgt

@PropertySource({"classpath:dpuProfiles.properties"}) 
@ConfigurationProperties({"classpath:dpu.profiles"}) 

Hinweis - die oben Beispiel soll aus dem Skript ausgeführt werden.

+0

Die Verwendung von/etc/foo als Classpath-Verzeichnis war eine gute Idee. Meine @ConfigurationProperites war jedoch korrekt, da es das Präfix der Eigenschaft und nicht den Dateinamen als Parameter erhält. Zusätzlich habe ich/etc/foo zu meinem in pom.xml hinzugefügt, so dass "mvn test" sie immer noch findet. – lathspell