簡體   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