[英]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.