Voici quelques-unes des pratiques que j'ai utilisé ou rencontrés. La combinaison de ces est généralement nécessaire dans la pratique.
En substituant les valeurs de la variable dans conffiles lors de la construction de
Voici un exemple de comment cela peut être fait avec Apache Ant. Propriétés Ant (${var.name}
) peut être contrôlé avec la génération des fichiers de configuration:
<filterset id="variables.to.replace">
<filter token="APPNAME" value="${app.name}"/>
<filter token="WEBAPP-PATH" value="${webapp.path}"/>
<filter token="ENCRYPT-ALGORITHM" value="${encrypt.algorithm}"/>
<filter token="ERROR-MAILTO" value="${error.mailTo}"/>
<!--...-->
</filterset>
<!-- Then, when building & copying the conf, replace the variables: -->
<copy todir="${properties.target.dir}">
<!-- env specific conf files -->
<fileset dir="${basedir}/env/${run.env}/webapp/WEB-INF/classes" />
<filterset refid="variables.to.replace"/>
</copy>
La bonne chose est que vous obtenez une amende de contrôle sur les différentes configurations au moment de la construction. Ce qui est mauvais, c'est que le système tend à se développer très complexe et difficile à maintenir si vous utilisez cette méthode à grande échelle pour un grand nombre de configurations différentes. Aussi, la construction du conffiles, aussi, le moyen le plus lent, les cycles de développement.
En substituant les variables de conf à l'intérieur de guerre à webapp de démarrage
C'est ce que j'ai l'habitude de le faire lors de l'utilisation de Spring Framework, même si il y a juste un possble de configuration, de bénéficier des avantages de la séparation des préoccupations. Avec le Printemps, vous pouvez avoir la conf valeurs remplacé par PlaceholderPropertyConfigurer à l'intérieur de Printemps contexte à webapp de démarrage. Dans ce cas, vous avez de toute façon choisir la bonne configuration, qui peut être configurée par exemple sur le temps de construction.
Par rapport au moment de la construction du remplacement, il est plus facile de temporairement manipuler les valeurs compressé webapp, si nécessaire. Bien sûr, la webapp doit être redémarré si vous changer quoi que ce soit, et le manuel, les modifications ne sont pas conservées entre webapp redéploiements. Le printemps est aussi limitée pour le Printemps contexte, si cela ne marche pas' par exemple web.xml (mais d'avoir des variables dans web.xml devrait probablement être évité toute façon à cause de ses limites).
La lecture de la locale conf à partir du fichier
Cette approche est probablement la plus simple à mettre en place: il suffit d'inventer un chemin du fichier de configuration, par exemple, $HOME/mywebapp/conf.properties
et faire de votre webapp en quelque sorte le lire au démarrage.
La bonne chose ici est que vous n'avez pas à se préoccuper de la conf lors de la construction/déploiement de la webapp. De toute façon, vous devriez avoir un peu sensible conf par défaut qui peut alors être remplacée par la résolution conf.
Avoir la conf dans une base de données
C'est la solution la plus flexible pour annuler les conf les paramètres, mais peut aussi devenir compliqué dans certains cas. Avoir la conf dans un tableau avec name
et value
colonnes devrait fonctionner pour la plupart des cas.
Bien sûr, vous ne pouvez pas configurer la connexion JDBC url dans une table de base de données, mais c'est une bonne solution pour de simples textuelle/numérique conf qui affecte la webapp de l'opération après la connexion db a été mis en place. Pour éviter une dégradation de la performance, assurez-vous de mettre en cache la conf en quelque sorte, si il sera fréquemment utilisés.
Extra pratiques
Comme l'a souligné kgiannakakis, il contribue également à définir une configuration de la page de diagnostic de certains type de votre application.