55 votes

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 l'application web 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 simplement 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 doit-il se trouver dans le répertoire WEB-INF ? Ou le placer ailleurs ?

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

48voto

MBCook Points 8316

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

J'ai demandé pourquoi on avait fait ça une fois.

Ce serait bien de tout stocker dans la base de données, mais il est évident que vous ne pouvez pas stocker les informations de connexion à la base de données dans la base de données.

Vous pourriez coder les choses en dur dans le code, mais c'est laid pour de nombreuses raisons. Si l'information doit être modifiée, vous devez reconstruire le code et le redéployer. Si quelqu'un obtient une copie de votre code ou de votre fichier WAR, il obtiendra ces informations.

Mettre les choses dans le fichier WAR semble être une bonne idée, mais si vous voulez changer beaucoup de choses, cela peut être une mauvaise idée. Le problème est que si vous devez modifier les informations, la prochaine fois que vous redéployerez le produit, le fichier sera écrasé et tout ce que vous n'avez pas pensé à modifier dans la version intégrée au WAR sera oublié.

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

La seule autre solution à laquelle je pense et qui fonctionnerait bien serait de garder tout dans la BD sauf les informations de connexion à la BD. Cela viendrait des propriétés du système Java qui sont récupérées par la JVM. C'est l'API des préférences mentionnée par Hans Doggen ci-dessus. Je ne pense pas qu'elle existait lorsque notre application a été développée, et si elle existait, elle n'a pas été utilisée.

Quant au chemin d'accès au fichier de configuration, il s'agit simplement d'un fichier dans le système de fichiers. Vous n'avez pas besoin de vous préoccuper du chemin d'accès web. Ainsi, lorsque votre servlet démarre, il lui suffit d'ouvrir le fichier "/config/monapp/config.xml" (ou autre) et il trouvera ce qu'il faut. Le fait de coder en dur le chemin d'accès me semble plutôt inoffensif.

16voto

Jataro Points 1405

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'une servlet.

public void init(ServletConfig servletConfig) throws ServletException{
    super.init(servletConfig);
    String path = servletConfig.getServletContext().getRealPath("/WEB-INF")

9voto

Michael Points 9231

Le mettre en place WEB-INF cachera le fichier XML aux utilisateurs qui essaient d'y accéder directement par une URL, donc oui, je dirais qu'il faut le mettre dans WEB-INF .

5voto

Hans Doggen Points 878

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

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

3voto

delfuego Points 9288

La réponse à cette question dépend de la manière dont vous comptez lire et écrire ce fichier de configuration.

Par exemple, le framework Spring vous donne la possibilité de utiliser des fichiers de configuration XML (ou fichiers de propriétés Java) ; ceux-ci peuvent être stockés dans votre classpath (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 utilisez Spring pour ce projet, l'endroit le plus simple pour stocker le fichier de configuration est le répertoire WEB-INF, puis utilisez la fonction ClassPathXmlApplicationContext pour accéder à votre fichier de configuration.

Mais là encore, tout dépend de la manière dont vous comptez accéder à ce fichier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X