1

Dans la configuration de Typesafe, il existe un opérateur très utile += qui ajoute une valeur à une liste de valeurs existante. Y a-t-il un moyen de faire un reverse, c'est-à-dire de supprimer un élément de la liste existante?Comment supprimer un élément de la liste dans la configuration de typesafe?

Dans les versions plus récentes de l'opérateur += de Play Framework (2.4+), on indique au conteneur d'injection de dépendances quels modules sont activés ou désactivés.

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

config Typesafe prend également en charge, y compris les fichiers de configuration dans l'autre, ce qui est souvent utilisé pour partially override configuration in different environments. Malheureusement, Play traite les listes enabled et disabled comme des ensembles et une fois qu'un module est ajouté à la liste disabled, il est impossible de le réactiver. Cela a été une source de problèmes et même un special note is given in Play's documentation décourageant l'utilisation de la liste disabled.

Note: Si vous travaillez sur une bibliothèque, il est déconseillé d'utiliser play.modules.disabled pour désactiver les modules, car il peut conduire à des résultats non déterministes lorsque les modules sont chargés par l'application (voir cette question pour raisons pour lesquelles vous ne devez pas toucher play.modules.disabled). En fait, play.modules.disabled est conçu pour permettre aux utilisateurs finaux de remplacer les modules activés par défaut.

Pour pouvoir désactiver conditionnellement modules je suis venu avec une solution laide à l'aide d'une fonction de typesafe config permettant de substitutions variables

En application.conf je

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

memcached.disabled = "" 

Et puis en production.conf je mets quelque chose comme ça

include "application.conf" 

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

ainsi que n production.conf est utilisé il empêche la désactivation dans application.conf. Clairement, ce n'est pas une solution acceptable.

Répondre

1

Qu'en est la configuration suivante:

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

Malheureusement première de vos suggestions ne fonctionnerait pas, parce que la documentation de lecture suggère tiers les modules peuvent inclure un autre fichier de configuration 'reference.conf' où la configuration par défaut du module est définie. Module peut être ajouté à activé dans ce fichier et en effet le module Memcached fait cela. Dans ce cas, si vous activez EhCache et ne désactivez pas explicitement Mrmcached, l'injecteur se plaint d'un conflit, car plus d'une implémentation était liée. Quant à votre deuxième suggestion, je suis d'accord que c'est une bien meilleure solution. – stys

+0

Merci, retiré cette suggestion de ma réponse. – Tomer