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

StackOverflow https://stackoverflow.com/questions/96247

Question

Je crée une application Web (WAR) et la déploie sur Tomcat. Dans webapp , une page avec un formulaire permet à un administrateur de saisir 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?

J'aimerais placer le fichier quelque part dans l'arborescence de répertoires où l'application elle-même est déployée. Mon fichier de configuration doit-il être dans le répertoire WEB-INF ? Ou le mettre 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?

Était-ce utile?

La solution

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 / nom d'utilisateur / config, ou tout ce que vous voulez). Lorsque nos servlets démarrent, ils lisent le fichier XML, en retirent quelques éléments (notamment les informations de connexion à la base de données), et c'est tout.

J'ai demandé pourquoi nous l'avions fait une fois.

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

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

Mettre des choses dans le fichier WAR semble bien, 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 le redéployerez, le fichier sera écrasé de sorte que tout ce que vous ne vous souveniez pas de changer dans la version intégrée au fichier WAR soit oublié.

Le fichier à 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, facilite le déploiement sur plusieurs machines si elles nécessitent toutes des valeurs de configuration différentes (car elles ne font pas partie du WAR).

La seule autre solution qui fonctionnerait bien serait de tout conserver dans la base de données, à l'exception des informations de connexion à la base de données. Cela proviendrait des propriétés du système Java extraites via la machine virtuelle Java. Ceci est la chose de l'API de préférences mentionnée ci-dessus par Hans Doggen Je ne pense pas que c'était à peu près au moment où notre application a été développée, sinon, elle n'aurait pas été utilisée.

En ce qui concerne le chemin d'accès au fichier de configuration, il ne s'agit que d'un fichier sur le système de fichiers. Vous n'avez pas besoin de vous soucier du chemin Web. Ainsi, lorsque votre servlet démarre, il ouvre simplement le fichier à l’aide du fichier " / /config/myapp/config.xml" (ou peu importe) et il trouvera la bonne chose. Simplement coder le chemin pour celui-ci me semble assez inoffensif.

Autres conseils

WEB-INF est un bon endroit pour mettre votre fichier de configuration. Voici un 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")

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

Je ne l'enregistrerais 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 consulter l'API Préférences ou d'écrire quelque chose dans le dossier des utilisateurs (l'utilisateur qui exécute Tomcat).

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

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

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

Si c'est votre configuration personnalisée, WEB-INF est un bon endroit pour cela. Mais certaines bibliothèques peuvent nécessiter que les configs résident dans WEB-INF / classes.

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