2015-11-06 60 views
0

我有一個應用程序,我正在使用噴霧罐進行構建。這是一個sbt項目,我有標準的sbt項目結構。我有一個application.dev.conf,application.test.conf和application.prod.conf。我現在想通過傳遞application.xxx.conf文件作爲參數來啓動我的spray-can服務器。過去我廣泛使用了Play框架,我可以控制或者將配置文件傳遞給play run命令。我現在怎麼能和Spray做同樣的事情?有什麼建議麼?REST服務使用噴霧罐

我有以下幾點:

val cfg = context.system.settings.config 

這是正確的方式來獲得application.conf文件保持我的噴霧演員裏面?

我試着這樣做:

sbt "project simple-http-server" run -Dconfig.resource=production.conf 

看來,無論是來運行後自動忽略。如何針對不同的配置發出run命令?

回答

2

您可以使用Typesafe's Config Library

只要定義的依賴:

libraryDependencies += "com.typesafe" % "config" % "1.3.0" 

在您的應用程序,你用它來獲取配置的保持:

val conf = ConfigFactory.load() 

默認情況下,搜索類路徑對於名爲application.{conf,json,properties}的文件,但您可以在運行應用程序時使用-Dconfig.file覆蓋此文件。

如果您希望在SBT內使用此功能,您需要啓用forking。 SBT通常不會派生一個新的JVM進程因此,你需要啓用它,並在build.sbt指定所需的JVM選項:

// fork a new JVM for 'run' and 'test:run' 
fork in run := true 

// set config file to production.conf 
javaOptions in run += "-Dconfig.file=production.conf" 

或者在命令行動態地設置:

sbt '; set javaOptions += "-Dconfig.file=production.conf"; run' 
+0

我想能夠執行sbt運行-Dconfig.file application.prod.conf,因此我想在啓動sbt時使用特定的應用程序conf文件控制。如果我使用javaOptions,是否意味着它使用production.conf作爲defailt? – sparkr

+0

是的,你也可以在命令行級別傳遞它。查看更新的答案。 – Sebastian

+0

謝謝!那就是我想要的! – sparkr