【问题标题】:REST Services Using spray-can使用喷罐的 REST 服务
【发布时间】:2015-11-07 18:51:01
【问题描述】:

我有一个使用喷雾罐构建的应用程序。这是一个 sbt 项目,我有标准的 sbt 项目结构。我有一个 application.dev.conf、application.test.conf 和 application.prod.conf。我现在想通过传递 application.xxx.conf 文件作为参数来启动我的喷雾罐服务器。我过去广泛使用过 Play 框架,我可以控制或者更确切地说将配置文件传递给 play run 命令。我现在怎么能对 Spray 做同样的事情?有什么建议吗?

我有以下:

val cfg = context.system.settings.config

这是在 Spray 中获取我的演员内部的 application.conf 文件的正确方法吗?

我试过这样做:

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

似乎运行之后发生的任何事情都被默默地忽略了。如何针对不同的配置发出运行命令?

【问题讨论】:

    标签: sbt spray


    【解决方案1】:

    您可以使用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'
    

    【讨论】:

    • 我希望能够运行 sbt run -Dconfig.file application.prod.conf,因此我想在启动 sbt 时有效地使用特定的应用程序 conf 文件控件。如果我使用 javaOptions,这是否意味着它使用 production.conf 作为默认设置?
    • 是的,您也可以在命令行级别传递它。查看更新的答案。
    • 谢谢!这就是我想要的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    相关资源
    最近更新 更多