2009-05-09 8 views
9

Je développe mon premier plugin Grails. Il doit accéder à un webservice. Le plugin aura évidemment besoin de l'url webservice. Quelle est la meilleure façon de configurer ceci sans le coder en dur dans les classes Groovy? Ce serait sympa avec différentes config pour différents environnements.Configuration du plugin Grails

Répondre

7

Si c'est seulement une petite option de configuration (lire: un élément), il peut être plus facile de slurp dans un fichier de propriétés. S'il y a un certain nombre d'options de configuration, et que certaines d'entre elles devraient être dynamiques, je suggérerais de faire ce que le plugin Acegi Security fait - ajouter un fichier à /grails-app/conf/plugin_name_config.groovy peut-être.

bonus ajouté est que l'utilisateur peut exécuter du code groovy pour calculer leurs options de configuration (beaucoup mieux sur l'utilisation de fichiers de propriétés), ainsi que de pouvoir faire des environnements différents avec facilité.

consultez http://groovy.codehaus.org/ConfigSlurper, qui est ce que les grails utilisent en interne pour slurp configs comme config.groovy.

//e.g. in /grails-app/conf/MyWebServicePluginConfig.groovy 
somePluginName { 
    production { 
     property1 = "some string" 
    } 
    test { 
     property1 = "another" 
    } 
} 

//in your myWebServicePlugin.groovy file, perhaps in the doWithSpring closure 
GroovyClassLoader classLoader = new GroovyClassLoader(getClass().getClassLoader()) 
ConfigObject config 
try { 
    config = new ConfigSlurper().parse(classLoader.loadClass('MyWebServicePluginConfig')) 
} catch (Exception e) {/*??handle or what? use default here?*/} 
assert config.test.property1.equals("another") == true 
+0

idée étrange d'avoir le fichier de configuration séparée juste pour une propriété, 'Config.groovy' doit être utilisé pour cette propriété. – tig

+2

@tig AFAIK, 'Config.groovy' est omis lorsque le plugin est empaqueté, et plutôt pour tester le plugin que de le configurer, non? – peterp

13

Vous pourriez vouloir Keep It Simple (tm). Vous pouvez définir l'URL directement dans Config.groovy - y compris les paramètres par environnement - et y accéder à partir de votre plugin si nécessaire en utilisant grailsApplication.config (dans la plupart des cas) ou un objet ConfigurationHolder.config (Voir plus details in the manual). En outre, ce paramètre peut également être défini dans les fichiers de propriétés Java standard ou dans d'autres fichiers de configuration spécifiés dans grails.config.locations.

par exemple. dans Config.groovy

// This will be the default value... 
myPlugin.url=http://somewhe.re/test/endpoint 
environments { 
    production { 
    // ...except when running in production mode 
    myPlugin.url=http://somewhe.re/for-real/endpoint 
    } 
} 

plus tard, dans un service fourni par votre plugin

import org.codehaus.groovy.grails.commons.ConfigurationHolder 
class MyPluginService { 
    def url = ConfigurationHolder.config.myPlugin.url 
    // ... 
} 
Questions connexes