Question

Je suis en train d'éliminer toutes les valeurs codées en dur dans une bibliothèque Java et je me demandais quel cadre serait le meilleur (en termes de configuration nulle ou proche de zéro) pour gérer la configuration d'exécution ?Je préférerais les fichiers de configuration basés sur XML, mais ce n'est pas indispensable.

Veuillez ne répondre que si vous avez une expérience pratique avec un framework.Je ne cherche pas d'exemples, mais d'expérience...

Était-ce utile?

La solution

Si vos valeurs codées en dur ne sont que de simples paires clé-valeur, vous devriez regarder java.util.Propriétés.C'est beaucoup plus simple que XML, plus facile à utiliser et extrêmement simple à mettre en œuvre.

Si vous travaillez avec Java et que les données que vous stockez ou récupérez du disque sont modélisées comme une paire clé-valeur (ce qui semble être le cas dans votre cas), alors je ne peux vraiment pas imaginer une meilleure solution.

J'ai utilisé des fichiers de propriétés pour une configuration simple de petits packages dans un projet plus important et pour une configuration plus globale pour l'ensemble d'un projet, et je n'ai jamais eu de problèmes avec cela.

Bien sûr, cela présente l’énorme avantage de ne nécessiter l’utilisation d’aucune bibliothèque tierce.

Autres conseils

Configuration d'Apache Commons fonctionne très bien.Il prend en charge le stockage de la configuration dans une large gamme de formats sur le backend, notamment les propriétés, XML, JNDI, etc.Il est facile à utiliser et à étendre.Pour en tirer le meilleur parti, utilisez un usine pour obtenir la configuration et utilisez simplement le Interface de configuration après cela.

Deux caractéristiques de Commons Configuration qui le différencient d'un fichier de propriétés simple sont qu'il prend en charge la conversion automatique en types courants (int, float, tableaux de chaînes) et qu'il prend en charge la substitution de propriétés :

server.host=myHost
server.url=http://${server.host}/somePath

Voici différentes options :

Vous voudrez peut-être lire Comparaison de la configuration Commons avec JFig et JConfig et Configuration de vos applications à l'aide de JFig pour quelques commentaires de divers utilisateurs.

Personnellement, j'ai utilisé jConfig et ce fut une bonne expérience.

Configuration des communs

Nous utilisons ceci.Les fichiers de propriétés seuls sont beaucoup plus faciles à gérer, mais si vous avez besoin de représenter des données plus complexes, la configuration de Commons peut le faire et lire également vos fichiers de propriétés.

Si vous ne faites rien de compliqué, je m'en tiendrai aux fichiers de propriétés.

Si vous souhaitez faire quelque chose d'avancé (et de type sécurisé), vous voudrez peut-être jeter un œil à ceci : http://www.ibm.com/developerworks/java/library/j-configint/index.html

l'outil d'utilisation intelligent des paramètres (Saisir, page) permet de externalisez presque toutes les décisions (codées en dur) en tant que paramètre dans un fichier de configuration basé sur XML. Il a été lancé début 2012 en réponse aux lacunes perçues dans les outils de configuration existants en termes de généralité et de séparation des préoccupations.

InPUT est probablement plus puissant que ne l'exigent la plupart des cas d'utilisation, car il permet formulation indépendante du langage de programmation de données expérimentales (entrées - sorties), avec des fonctionnalités telles que la définition de descripteur complexe aux mappages de classes, ou génération et validation de configurations aléatoires basées sur des plages de valeurs prédéfinies (pour les tests et la recherche, par ex.simulations Monte-Carlo).Tu peux définir des paramètres avec des sous-paramètres, des restrictions relatives sur les valeurs des paramètres (param numérique a > param b) etc..

Il est encore en version bêta, mais plutôt stable, je l'utilise pour mes recherches, pour le configuration et documentation des expériences, et à des fins pédagogiques.Une fois qu'il est disponible pour d'autres langages (adaptateur C++ dans le tube), d'autres chercheurs/praticiens peuvent réutiliser les descripteurs exécutant leurs implémentations des mêmes algorithmes en C++ (en utilisant le concept de mappage de code).De cette façon, les résultats expérimentaux peuvent être validés/les programmes peuvent être migrés plus facilement.La documentation est toujours en cours de travail, mais quelques des exemples sont disponibles sur la page.Entrée est Open source logiciel.

Pour ceux que cela intéresse, le Document de recherche conceptuel.

J'ai tendance à utiliser java.util.Properties (ou des classes similaires dans d'autres langages et frameworks) enveloppé dans une classe de configuration spécifique à l'application la plupart du temps, mais je suis très intéressé par des alternatives ou des variations à ce sujet.D'autant plus que les choses peuvent devenir un peu délicates si des boîtes de dialogue de configuration graphique ou plusieurs vues des données de configuration sont impliquées.

Malheureusement, je n'ai aucune expérience avec des bibliothèques spécifiques pour Java (sauf avec celles que j'ai écrites moi-même), mais tous les pointeurs seraient appréciés.

Mise à jour

D'ACCORD.Ce n'était pas tout à fait vrai, trois est le Projet de configuration Java Spring.

je a écrit J'en ai parlé il y a quelques semaines et j'en suis arrivé à la conclusion que XML est l'une des notations les plus utilisées.

Est-ce le meilleur ?Je ne pense pas, j'aime vraiment JSON, mais les outils ne sont toujours pas à la hauteur de XML donc je suppose que nous devons attendre et voir.

Tu peux essayer YamlHaricots.De cette façon, vous écrivez les classes dans lesquelles vous souhaitez conserver vos données de configuration, vous pouvez ensuite les écrire et les lire automatiquement vers et depuis YAML.

YAML est un format de données lisible par l'homme.Il a plus de pouvoir expressif que java.util.Properties.Vous pouvez avoir des listes, des cartes, des ancres, des données saisies, etc.

Veuillez jeter un œil à cette URL : http://issues.apache.org/jira/browse/CONFIGURATION-394

Le cadre de configuration que nous recherchons est quelque chose au-dessus de la configuration Apache Commons et doit prendre en charge les problèmes de concurrence, les problèmes JMX et la plupart des magasins (par exemple, fichier .properties, fichiers .xml ou PreferencesAPI).

Ce que l'équipe weblogic propose sur la « Console d'administration » est intéressant car, grâce à elle, vous pouvez avoir des mises à jour transactionnelles (atomiques) sur les configurations afin que les auditeurs enregistrés soient avertis.

Les gars d'Apache insistent sur le fait que ce projet est peut-être hors du cadre de la configuration Commons !

J'ai joint un cadre de configuration simple, jetez-y un oeil s'il vous plaît.

Je viens de poster un bref extrait de code sur l'utilisation de ClassPathResource de Spring comme alternative à IoC.ClassPathResource vous permet de placer les fichiers de propriétés n'importe où sur le chemin de classe (par exemple, au même endroit, ou en tant qu'homologues du code qu'ils configurent.Mon exemple utilise simplement java.util.Properties, vous pouvez donc utiliser le style de texte brut "name=value" ou son format XML.

Les fichiers de propriétés sont très simples, si vous avez besoin de quelque chose de plus fonctionnel, vous pouvez formater certains de vos fichiers de configuration en classes Java.Ceux-ci peuvent être placés dans un package/module différent et peuvent être précompilés ou chargés au moment de l'exécution avec une bibliothèque comme BeanShell.

Note:Dans le cas le plus simple (précompilé), vous n'avez besoin d'aucune bibliothèque supplémentaire.

Concernant les suggestions d'utilisation de java.util.Properties - à partir de jdk 1.5, l'API Préférences (java.util.prefs) semble être l'alternative préférée à l'utilisation de l'API Propriétés.

Les raisons:évolutivité accrue, neutralité back-end, ect.

Vous pourriez jeter un oeil à ce qui vient d'être annoncé outils4j-config dont l'énoncé de mission est de vous permettre de gérer facilement la configuration au moment de l'exécution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top