繁体   English   中英

如何从typesafe配置中的列表中删除项目?

[英]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将enableddisabled列表视为集合,一旦将模块添加到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.

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