ich zwei Dateien in meinem src/main/resources
die richtige Datei config Pick-
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
modifizierteval 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)
hat nicht funktioniert. findet die Konfigurationsdatei nicht. –
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
ja es ist in der Wurzel. Ich habe ein 'jar -tvf' auf dem Glas gemacht und bestätigt. –