Quel est le meilleur endroit pour stocker un fichier de configuration dans une application Web Java (WAR)?


Je crée une application web (WAR) et la déploie sur Tomcat. Dans la webapp il y a une page avec un formulaire où un administrateur peut entrer des données de configuration. Je ne veux pas stocker ces données dans un SGBD, mais juste dans un fichier XML sur le système de fichiers. Où le mettre?

Je voudrais placer le fichier quelque part dans l'arborescence des répertoires où l'application elle-même est déployée. Mon fichier de configuration devrait-il se trouver dans le répertoire WEB-INF? Ou le mettre ailleurs?

Et quel est le code Java à utiliser dans un servlet pour trouver le chemin absolu du répertoire? Ou peut-on y accéder avec un chemin relatif?

Author: informatik01, 2008-09-18

6 answers

Ce que nous faisons est de le mettre dans un répertoire séparé sur le serveur (vous pouvez utiliser quelque chose comme /config, /opt/config, /root/config, /home/username/config, ou tout ce que vous voulez). Lorsque nos servlets démarrent, ils lisent le fichier XML, en tirent quelques éléments (surtout les informations de connexion DB), et c'est tout.

J'ai demandé pourquoi nous avons fait cela une fois.

Ce serait bien de tout stocker dans la base de données, mais évidemment, vous ne pouvez pas stocker les informations de connexion DB.

Vous pouvez coder en dur des choses dans le code, mais c'est moche pour de nombreuses raisons. Si jamais les informations doivent changer, vous devez reconstruire le code et redéployer. Si quelqu'un obtient une copie de votre code ou de votre fichier WAR, il obtiendra alors cette information.

Mettre des choses dans le fichier WAR semble bien, mais si vous voulez changer beaucoup de choses, cela pourrait être une mauvaise idée. Le problème est que si vous devez modifier les informations, la prochaine fois que vous redéployer il écrasera le fichier de sorte que tout ce que vous je ne me suis pas souvenu de changer dans la version se construit dans la GUERRE est oublié.

Le fichier dans un endroit spécial sur le système de fichiers fonctionne assez bien pour nous. Il n'a pas de gros inconvénients. Vous savez où il se trouve, il est stocké séparément, facilite le déploiement sur plusieurs machines si elles ont toutes besoin de valeurs de configuration différentes (car cela ne fait pas partie de la GUERRE).

La seule autre solution à laquelle je peux penser qui fonctionnerait bien serait de garder tout dans la base de données sauf la connexion à la base de données info. Cela proviendrait des propriétés du système Java qui sont récupérées via la JVM. C'est la chose API des préférences mentionnée par Hans Doggen ci-dessus. Je ne pense pas que ce soit le moment où notre application a été développée pour la première fois, si c'était le cas, elle n'a pas été utilisée.

Quant au chemin d'accès au fichier de configuration, c'est juste un fichier sur le système de fichiers. Vous n'avez pas à vous soucier du chemin Web. Ainsi, lorsque votre servlet démarre il ouvre juste le fichier "/config/myapp/config.xml " (ou quoi que ce soit) et il va trouver la bonne chose. Juste hardcoding le chemin pour celui-ci me semble assez inoffensif.

 48
Author: MBCook, 2008-09-18 20:15:24

WEB-INF est un bon endroit pour mettre votre fichier de configuration. Voici du code pour obtenir le chemin absolu du répertoire à partir d'un servlet.

public void init(ServletConfig servletConfig) throws ServletException{
    super.init(servletConfig);
    String path = servletConfig.getServletContext().getRealPath("/WEB-INF")
 16
Author: Jataro, 2008-09-18 20:19:45

Le mettre dans WEB-INF masquera le fichier XML aux utilisateurs qui essaient d'y accéder directement via une URL, donc oui, je dirais le mettre dans WEB-INF.

 9
Author: Michael, 2008-09-18 20:29:48

Je ne le stockerais pas dans le dossier de l'application, car cela remplacerait la configuration par un nouveau déploiement de l'application.

Je vous suggère de jeter un oeil à l'API des préférences, ou d'écrire quelque chose dans le dossier des utilisateurs (l'utilisateur qui exécute Tomcat).

 5
Author: Hans Doggen, 2008-09-18 19:57:34

La réponse à cela dépend de la façon dont vous avez l'intention de lire et d'écrire ce fichier de configuration.

Par exemple, le framework Spring vous donne la possibilité de utiliser des fichiers de configuration XML (ou des fichiers de propriété Java); ceux-ci peuvent être stockés dans votre chemin de classe (par exemple, dans le répertoire WEB-INF), n'importe où ailleurs sur le système de fichiers, ou même en mémoire. Si vous deviez utiliser Spring pour cela, l'endroit le plus simple pour stocker le fichier de configuration est dans votre répertoire WEB-INF, puis utilisez Spring ClassPathXmlApplicationContext classe pour accéder à votre fichier de configuration.

Mais encore une fois, tout dépend de la façon dont vous prévoyez d'accéder à ce fichier.

 3
Author: delfuego, 2008-09-18 19:57:38

S'il s'agit de votre configuration personnalisée, WEB-INF est un bon endroit pour cela. Mais certaines bibliothèques peuvent nécessiter des configs pour résider dans WEB-INF / classes.

 1
Author: axk, 2008-09-18 19:58:21