gpt4 book ai didi

java - 如何从类型安全配置中的列表中删除项目?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:12:09 25 4
gpt4 key购买 nike

在 Typesafe 配置中,有一个非常有用的运算符 += 可以将一个值附加到现有的值列表中。有没有办法做相反的事情,即从现有列表中删除一个项目?

在较新版本的 Play Framework (2.4+) 中,+= 运算符用于告知依赖注入(inject)容器启用或禁用哪些模块。

play {
modules {
disabled += "play.api.cache.EhCacheModule"
enabled += "com.github.mumoshu.play2.memcached.MemcachedModule"
}
}

Typesafe config 还支持将配置文件相互包含,这通常用于partially override configuration in different environments .不幸的是,Play 将 enableddisabled 列表视为集合,一旦将模块添加到 disabled 列表,就无法再启用它。这一直是问题的根源,甚至是 special note is given in Play's documentation不鼓励使用 disabled 列表。

Note: If you are working on a library, it is highly discouraged to use play.modules.disabled to disable modules, as it can lead to nondeterministic results when modules are loaded by the application (see this issue for reasons on why you should not touch play.modules.disabled). In fact, play.modules.disabled is intended for end users to be able to override what modules are enabled by default.

为了能够有条件地禁用模块,我想出了一个丑陋的解决方法,使用允许变量替换的类型安全配置功能

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 中的禁用。显然,这不是一个可接受的解决方案。

最佳答案

下面的配置呢:

应用程序.conf

play {
modules {
enabled += "play.api.cache.EhCacheModule"
}
}

生产.conf

include "application.conf"

play {
modules {
enabled += "com.github.mumoshu.play2.memcached.MemcachedModule"
disabled += "play.api.cache.EhCacheModule"
}
}

关于java - 如何从类型安全配置中的列表中删除项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42739434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com