为播放和初始化顺序设置系统 属性 application.secret
Setting system property application.secret for Play and initialization order
我正在使用 NettyServerComponents
将 Play 嵌入到我的应用程序服务器中,但我在以编程方式设置所需的 "application.secret" 时遇到了问题。
我拨打的电话是:
System.setProperty("application.secret", secret)
我可以验证它是通过 System.getProperty("application.secret")
设置的。但是,如果我将调用放在封装并启动服务器的 class 中,初始化将失败:
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
?
看到的值
我已经解决了初始化顺序问题,虽然它对我的设置来说相当具体,但我想 post 我的答案,以防有人遇到类似情况。
使用 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 从那里获取它。
我正在使用 NettyServerComponents
将 Play 嵌入到我的应用程序服务器中,但我在以编程方式设置所需的 "application.secret" 时遇到了问题。
我拨打的电话是:
System.setProperty("application.secret", secret)
我可以验证它是通过 System.getProperty("application.secret")
设置的。但是,如果我将调用放在封装并启动服务器的 class 中,初始化将失败:
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
?
我已经解决了初始化顺序问题,虽然它对我的设置来说相当具体,但我想 post 我的答案,以防有人遇到类似情况。
使用 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 从那里获取它。