Lecture des propriétés de Tomcat
Quelle est la meilleure pratique pour la lecture de fichier de configuration(s) pour votre application. Les dossiers serveur tomcat sont "sur le chemin de la classe".
J'ai essayé de placer mon fichier de config dans le TOMCAT_HOME\conf
mais je ne peux pas le lire à partir de mon servlet.
Essayé d'utiliser ce (il en est de même de l'application.les propriétés de fichier de conf):
this.getClass().getClassLoader().getResourceAsStream("/app.properties");
Je n'ai pas beaucoup de propriétés peut-être 10-15 j'ai pensé que ce ne sera pas un problème. Je me souviens quand j'étais à l'aide de jboss ce n'était pas la question comme cela.
Dans mon application, j'ai également spécifier la connexion aux bases de printemps dans le context.xml
puis-je indiquer mon propriétés de là en quelque sorte? Ou comment cela fonctionne avec tomcat?
J'aimerais garder mes propriétés séparé de ma guerre/déballé guerre.
Mise à jour
Raison de la demande c'est parce que je ne sais pas où est mon application va être déployée (à quel endroit)
source d'informationauteur Gandalf StormCrow | 2012-09-05
Vous devez vous connecter pour publier un commentaire.
Il y a beaucoup de différentes manières, mais cela dépend de vos besoins:
Pour charger un fichier de propriétés de
$TOMCAT_HOME/conf
répertoire que vous aurez besoin pour accéder à l'aide d'unjava.io.File
objet depuis le chargeur de classes (comme dansthis.getClass().getClassLoader().getResourceAsStream(...)
est seulement capable de charger des fichiers (et des classes) à partir de votre chemin de classe (sousWEB-INF/classes
WEB-INF/lib
ou$TOMCAT_HOME/lib
).Le plus simple exemple pour charger un fichier à partir du serveur Tomcat du répertoire config serait:
Avis que cette approche permet de rendre votre code dépendant de Tomcat (le mécanisme de chargement dépend du fait d'un Tomcat du système de la propriété). C'est quelque chose que je ne recommande pas du tout donc, si vous déplacer votre fichier de propriétés d'un dossier à l'intérieur de votre classpath alors vous devriez être en mesure de charger la façon dont vous avez essayé et que votre application peut être déployée dans n'importe quel conteneur.
Et, vous pouvez configurer vos propriétés JNDI ressources, mais il serait trop compliqué d'y accéder.
Placer vos fichiers dans votre webapp est
WEB-INF/classes
. C'est la valeur par défaut répertoire de chemin de classe.conf
si pour Tomcat internes seulement.Plutôt que de se référer à l'emplacement d'un fichier de configuration, j'aimerais utiliser JNDI-tenu de la configuration, de conserver les applications dépend de la configuration de données et Java EE normes. Je vois deux options:
Si vous avez seulement un nombre modéré de configuration des entrées dans votre fichier de propriétés, puis envisager de faire leur Entrées D'Environnement et d'y accéder via JNDI dans vos applications.
Sinon, dire que dans le cas où vous voulez garder vos propriétés dans un fichier de propriétés séparé, vous pouvez également créer un bean pour représenter les propriétés, d'une usine (initialisation du bean à l'aide d'un fichier de propriété) et de le raccorder à JNDI comme un Définition De La Ressource.
Avec ça, on pourra peut-être même régulièrement re-lire le fichier de propriété sans avoir besoin de redémarrer les applications, de basculer entre les différentes sources de configuration ou similaire à d'autres exigences.
Chacune des applications web à l'aide de cette configuration devra inclure un Référence De La Ressource dans
web.xml
à se référer à la configuration de haricots (ou une référence à chaque env. l'entrée si l'option 1 est utilisé).Comme je sais que vous pouvez configurer
datasource
dans tomcat. Source de données dans TomcatAprès cela, vous pouvez utiliser
datasource
dans votre application.Si elle pourrait être un pain PITA, c'est probablement aussi une fonctionnalité que vous ne savez pas où il sera déployé. Vous ne pouvez pas "en couple" - vous alors de ce fait!
En fonction du reste de votre Java pile, la meilleure façon est généralement indépendant de Tomcat. Si vous utilisez le Printemps, vous pouvez dire par exemple:
ou si vous utilisez Java Config, un autre exemple:
Dans la plaine de Java, vous pouvez dire:
où loader est une instance de ClassLoader
add .properties file in apache-tomcat-7.0.78\conf folder
File configDir = new File(System.getProperty("catalina.base"), "conf");
File configFile = new File(configDir, "dashboardiframes.properties");
InputStream stream = new FileInputStream(configFile);Properties properties = new Properties();
properties.load(stream);