1

In der Typesafe-Konfiguration gibt es einen sehr nützlichen Operator +=, der einen Wert an eine bestehende Liste von Werten anhängt. Gibt es eine Möglichkeit, eine Umkehrung durchzuführen, d. H. Ein Element aus der vorhandenen Liste zu entfernen?Wie man ein Einzelteil von der Liste in der typsicheren Konfiguration löscht?

In neueren Versionen von Play Framework (2.4+) += Operator wird verwendet, um dem Dependency-Injection-Container mitzuteilen, welche Module aktiviert oder deaktiviert sind.

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

Typsichere Config unterstützt auch Konfigurationsdateien ineinander einschließlich und dies häufig zu partially override configuration in different environments verwendet wird. Leider behandelt Play enabled und disabled Listen als Sets und sobald ein Modul zu disabled Liste hinzugefügt wird, gibt es keine Möglichkeit, es wieder zu aktivieren. Dies war eine Quelle von Problemen und sogar eine special note is given in Play's documentation entmutigende Verwendung von disabled Liste.

Hinweis: Wenn Sie auf einer Bibliothek arbeiten, ist es sehr mutlos play.modules.disabled zu verwenden, um Module zu deaktivieren, da es zu nicht deterministischen Ergebnissen führen kann, wenn Module durch die Anwendung geladen werden (siehe diese Ausgabe für Gründe warum Sie play.modules.disabled nicht berühren sollten). Tatsächlich ist play.modules.disabled für Endbenutzer gedacht, um zu überschreiben, welche Module standardmäßig aktiviert sind.

der Lage sein, bedingt Module deaktivieren mich mit einer hässlichen Abhilfe mit einem Merkmale der typsichere Konfiguration ermöglicht variable Substitutionen

Ich habe in production.conf In application.conf kam ich

play { 
    modules { 
    disabled += ${memcached.disabled}"com.github.mumoshu.play2.memcached.MemcachedModule" 
    } 
} 

memcached.disabled = "" 

Und dann setzen etwas wie das

include "application.conf" 

memcached.disabled = "x" 
play.modules.disabled += "play.api.cache.EhCacheModule" 

so whe n production.conf wird verwendet es Mangels die Deaktivierung in application.conf. Natürlich ist dies keine akzeptable Lösung.

Antwort

1

Was über die folgende Konfiguration:

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" 
    } 
} 
+0

Leider würde zunächst Ihre Vorschläge nicht funktionieren, weil sie als Play-Dokumentation Dritter schlägt vor, Module können eine andere Konfigurationsdatei 'reference.conf' enthalten, in der die Standardkonfiguration des Moduls definiert ist. Das Modul kann hinzugefügt werden, um in dieser Datei aktiviert zu werden, und tatsächlich macht dies das Memcached-Modul. Wenn Sie in diesem Fall EhCache aktivieren und Mrmcached nicht explizit deaktivieren, klagt der Injektor über einen Konflikt, weil mehr als eine Implementierung gebunden war. Was Ihren zweiten Vorschlag betrifft, stimme ich zu, dass dies eine viel bessere Lösung ist. – stys

+0

Danke, entfernt diesen Vorschlag aus meiner Antwort. – Tomer

Verwandte Themen