[英]How to remove an item from list in typesafe config?
在Typesafe配置中,有一个非常有用的运算符+=
,它将值附加到现有的值列表中。 有没有办法做反向,即从现有列表中删除项目?
在较新版本的Play Framework(2.4+)中, +=
运算符用于告知依赖注入容器启用或禁用哪些模块。
play {
modules {
disabled += "play.api.cache.EhCacheModule"
enabled += "com.github.mumoshu.play2.memcached.MemcachedModule"
}
}
Typesafe配置还支持将配置文件包含在一起,这通常用于部分覆盖不同环境中的配置 。 不幸的是,Play将enabled
和disabled
列表视为集合,一旦将模块添加到disabled
列表,就无法启用它。 这是一个问题的根源,甚至在Play的文档中给出了一个特别说明,不鼓励使用disabled
列表。
注意:如果您正在使用库,则强烈建议不要使用play.modules.disabled来禁用模块,因为当应用程序加载模块时,它会导致不确定的结果(请参阅此问题,了解为什么不应该这样做touch 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
的禁用。 显然,这不是一个可接受的解决方案。
以下配置如何:
application.conf
play {
modules {
enabled += "play.api.cache.EhCacheModule"
}
}
production.conf
include "application.conf"
play {
modules {
enabled += "com.github.mumoshu.play2.memcached.MemcachedModule"
disabled += "play.api.cache.EhCacheModule"
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.