繁体   English   中英

如何在运行时刷新application.conf

[英]how to refresh application.conf at runtime

我通过设置环境变量来更新application.conf中的键值

play.http.secret.key=${?MY_SECRET_KEY}

但是它仍然加载先前的值。
系统重新引导后,更改生效。
有没有一种方法可以在不重新启动的情况下刷新配置文件?

AFAIK,没有开箱即用的机制可以做这种事情。 事实证明,通过“ sbt run”命令启动Play时,它将以Dev模式启动,创建两个ClassLoader,一个用于您的代码,另一个用于不可变的代码,例如库,依赖项和框架代码本身。 这样做是为了提供热部署功能,即杀死并重新加载第一个CL。 因为application.conf是在启动时由Play加载的,所以我认为它是在固定的ClassLoader中加载的,因此无法重新加载。

请尝试以下操作:

在名为sample1.conf的文件中给出:

a {
   b {
      c = 30
      d = ["Red", "Orange", "Green", "Blue"]
   }
}

如果要更改属性,请确保先将其更改为系统属性,然后调用无效缓存,然后再次加载。 这也是允许您在命令行上覆盖的内容。

System.setProperty("a.b.c", "100")
ConfigFactory.invalidateCaches()
val config = ConfigFactory.load("sample1")
config.getDouble("a.b.c") should be (100.0)

不知道这是否适用于所有情况。 因此,它可能会或可能不会与您选择的应用程序一起使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM