Java 如何在typesafe配置中从列表中删除项目?
在类型安全配置中,有一个非常有用的运算符Java 如何在typesafe配置中从列表中删除项目?,java,playframework,playframework-2.4,playframework-2.5,typesafe-config,Java,Playframework,Playframework 2.4,Playframework 2.5,Typesafe Config,在类型安全配置中,有一个非常有用的运算符+=,它将一个值附加到现有的值列表中。是否有方法进行反向操作,即从现有列表中删除项目 在较新版本的Play Framework(2.4+)+=中,运算符用于告诉依赖项注入容器哪些模块已启用或禁用 play { modules { disabled += "play.api.cache.EhCacheModule" enabled += "com.github.mumoshu.play2.memcached.MemcachedModule
+=
,它将一个值附加到现有的值列表中。是否有方法进行反向操作,即从现有列表中删除项目
在较新版本的Play Framework(2.4+)+=
中,运算符用于告诉依赖项注入容器哪些模块已启用或禁用
play {
modules {
disabled += "play.api.cache.EhCacheModule"
enabled += "com.github.mumoshu.play2.memcached.MemcachedModule"
}
}
Typesafe配置还支持将配置文件包含到另一个配置文件中,这通常用于。不幸的是,Play将已启用
和已禁用
列为集合,一旦模块添加到已禁用
列表中,就无法将其重新启用。这一直是问题的根源,甚至是使用disabled
列表令人沮丧
注意:如果您正在使用库,则强烈建议您使用play.modules.disabled禁用模块,因为当应用程序加载模块时,这可能会导致不确定的结果(有关不应触摸play.modules.disabled的原因,请参阅本问题)。事实上,play.modules.disabled旨在让最终用户能够覆盖默认启用的模块
为了能够有条件地禁用模块,我想出了一个丑陋的解决方法,使用了允许变量替换的typesafe配置特性
在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"
}
}
不幸的是,您的第一个建议行不通,因为正如播放文档所示,第三方模块可能包含另一个配置文件
reference.conf
,其中定义了模块默认配置。模块可以添加到该文件中的enabled中,而Memcached模块确实做到了这一点。在这种情况下,如果启用EhCache而不显式禁用Mrmcached,注入器会抱怨冲突,因为绑定了多个实现。至于你的第二个建议,我同意这是一个更好的解决方案。谢谢,从我的答案中删除了这个建议。