2016-10-25 3 views
0

ich zwei Dateien in meinem src/main/resourcesdie richtige Datei config Pick-

Ordner erstellt haben
application-dev.conf 

die

dev { 
    oracle { 
    host = "foo" 
    } 
} 

und applikations qa.conf

die

qa { 
    oracle { 
    host = "bar" 
    } 
} 
enthält enthält

Ich lese diese Konfiguration mit dem folgenden Code

val env = args.lift(0).getOrElse("dev") 
val parsedConfig = ConfigFactory.parseFile(new File(s"src/main/resources/application-${env}.conf")) 
val conf = ConfigFactory.load(parsedConfig) 
val config = conf.getConfig(env) 
println(config.getString("oracle.host")) 

Alles zur Entwicklungszeit funktioniert gut, und ich bin in der Lage die richtige Konfigurationsdatei auf der Grundlage der Umgebung angegeben zu lesen. Wenn ich nichts spezifiziere, wird die Entwicklung gewählt.

jetzt aber, wenn ich meine JAR-Datei als Baugruppe verpacken sbt assembly verwenden und nun versuchen, meine Anwendung von der Kommandozeile java -jar ./target/MyApplication.jar

ich einen Fehler

Exception in thread "main" com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'dev' 
    at com.typesafe.config.impl.SimpleConfig.findKeyOrNull(SimpleConfig.java:152) 
    at com.typesafe.config.impl.SimpleConfig.findOrNull(SimpleConfig.java:170) 
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:184) 
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:189) 

Mein Ziel bekommen zu laufen ist, dass ich soll habe mehrere Konfigurationsdateien und ich sollte in der Lage sein, zwischen ihnen zur Entwicklungszeit und auch zu wählen, wenn die Anwendung als Glas verpackt wird.

auf Anregung Basierend unten ich meinen Code zu

modifizierte
val env = args.lift(0).getOrElse("dev") 
val parsedConfig = ConfigFactory.parseFile(new File(getClass.getResource(s"/application-${env}.conf").toURI)) 
val conf = ConfigFactory.load(parsedConfig) 
val config = conf.getConfig(env) 
println(config.getString("oracle.host")) 

Werke in dev, aber wenn ich versuche, meine Montage laufen sie eine Ausnahme

Exception in thread "main" java.lang.IllegalArgumentException: URI is not hierarchical 
    at java.io.File.<init>(File.java:418) 

Antwort

1

Die Konfigurationsdatei wirft, ist nicht in src/main/resources in Ihrer Versammlung. Normalerweise befindet es sich im Stammverzeichnis des Klassenpfads (es sei denn, Sie haben das Plug-in so konfiguriert, dass es an einer anderen Stelle installiert wird).

Versuchen Sie mit wie unten.

ConfigFactory.load(s"application-${env}.conf") 

Dies lädt die Konfigurationsdatei aus dem Klassenpfad.

+0

hat nicht funktioniert. findet die Konfigurationsdatei nicht. –

+0

Sind Sie sicher, dass sich die Konfigurationsdatei im Stammverzeichnis des Klassenpfads in Ihrer Assembly befindet? Wenn nicht, müssen Sie den Pfad entsprechend hinzufügen. – Jegan

+0

ja es ist in der Wurzel. Ich habe ein 'jar -tvf' auf dem Glas gemacht und bestätigt. –