我正在使用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
看到的价值?
答案 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从那里获取了它。