为播放和初始化顺序设置系统属性application.secret

时间:2015-04-25 00:31:15

标签: scala playframework netty

我正在使用NettyServerComponents在我的应用服务器中嵌入 Play ,而且我在设置所需的" application.secret"时遇到问题。编程。

我的电话是:

System.setProperty("application.secret", secret)

我可以验证它是通过System.getProperty("application.secret")设置的。但是,如果我将调用放在封装和启动服务器的类中,则初始化将失败:

Exception in thread "main" @6m0lkl2h5: Configuration error
  at play.api.libs.CryptoConfigParser.get$lzycompute(Crypto.scala:235)
  at play.api.libs.CryptoConfigParser.get(Crypto.scala:204)
  at play.api.BuiltInComponents$class.cryptoConfig(Application.scala:275)
  ...

如果我在代码中提前移动了相同的setProperty调用,那就可以了。

是否有一些import用于播放导致系统属性被读取和缓存?或者其他一些原因导致我没有看到我可以通过getProperty看到的价值?

1 个答案:

答案 0 :(得分:0)

我已经解决了初始化顺序问题,虽然它对我的设置非常具体,但我想发布我的答案以防万一有人在类似的情况下结束。

使用NettyServerComponents时通过以下行配置播放:

lazy val configuration: Configuration = Configuration(ConfigFactory.load())

ConfigFactory.load()com.typesafe.config的一部分,并在首次访问时静态初始化配置。我嵌入Play的守护进程也通过net.ceedubs.ficus.FicusConfig使用此配置,这意味着即使上面的行是一个延迟初始化,我的代码之前也调用了ConfigFactory.load()来进行自己的配置,这意味着设置application.secret来自setProperty没有效果。

为了奖励乐趣,因为两组代码都使用ConfigFactory.load(),所以我只需要放

application {
  secret = "foo"
}

在我现有的配置文件中,Play从那里获取了它。