【发布时间】:2017-03-11 19:13:11
【问题描述】:
在 Typesafe 配置中,有一个非常有用的运算符 += 将一个值附加到现有的值列表中。有没有办法做反向,即从现有列表中删除一个项目?
在较新版本的 Play Framework (2.4+) 中,+= 运算符用于告诉依赖注入容器启用或禁用哪些模块。
play {
modules {
disabled += "play.api.cache.EhCacheModule"
enabled += "com.github.mumoshu.play2.memcached.MemcachedModule"
}
}
Typesafe config 还支持将配置文件相互包含,这通常用于partially override configuration in different environments。不幸的是,Play 将 enabled 和 disabled 列表视为集合,一旦将模块添加到 disabled 列表中,就无法重新启用它。这一直是问题的根源,甚至是 special note is given in Play's documentation 不鼓励使用 disabled 列表。
注意:如果您正在使用库,强烈建议不要使用 play.modules.disabled 禁用模块,因为当应用程序加载模块时,它可能会导致不确定的结果(请参阅此问题了解原因你不应该触摸 play.modules.disabled)。实际上,play.modules.disabled 旨在让最终用户能够覆盖默认启用的模块。
为了能够有条件地禁用模块,我想出了一个丑陋的解决方法,它使用了允许变量替换的类型安全配置功能
在application.conf我有
play {
modules {
disabled += ${memcached.disabled}"com.github.mumoshu.play2.memcached.MemcachedModule"
}
}
memcached.disabled = ""
然后在production.conf 我放了这样的东西
include "application.conf"
memcached.disabled = "x"
play.modules.disabled += "play.api.cache.EhCacheModule"
所以当使用production.conf 时,它会破坏application.conf 中的禁用。显然这不是一个可接受的解决方案。
【问题讨论】:
标签: java playframework playframework-2.4 playframework-2.5 typesafe-config