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 existe une page avec un formulaire dans lequel un administrateur peut 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?

Je voudrais mettre le fichier quelque part dans l’arborescence où l’application elle-même est déployée. Mon fichier de configuration doit-il figurer 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?

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 (surtout les informations de connexion à la firebase database), et c’est tout.

J’ai demandé pourquoi nous l’avons fait une fois.

Ce serait bien de tout stocker dans la firebase database, mais vous ne pouvez évidemment pas stocker les informations de connexion à la firebase database dans la firebase database.

Vous pouvez coder en dur des éléments dans le code, mais c’est moche pour de nombreuses raisons. Si l’info doit changer, vous devez reconstruire le code et redéployer. Si quelqu’un obtient une copie de votre code ou de votre fichier WAR, il recevra alors cette information.

Mettre des choses dans le fichier WAR semble bien, mais si vous voulez changer les choses, cela peut être une mauvaise idée. Le problème est que si vous devez modifier les informations, la prochaine fois que vous les redéployez, le fichier sera écrasé pour que tout ce que vous ne vous souveniez pas de changer dans la version intégrée à WAR soit oublié.

Le fichier situé à un endroit particulier du système de fichiers fonctionne très 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 nécessitent toutes des valeurs de configuration différentes (car cela ne fait pas partie du WAR).

La seule autre solution qui me convienne serait de garder tout dans la firebase database, sauf les informations de connexion à la firebase database. Cela proviendrait des propriétés du système Java récupérées via la machine virtuelle Java. Cette chose de l’API Préférences mentionnée par Hans Doggen ci-dessus. Je ne pense pas que c’était à l’époque où notre application a été développée, si ce n’était pas le cas.

En ce qui concerne le chemin d’access 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 “/config/myapp/config.xml” (ou autre) et il trouvera la bonne chose. Le simple fait de coder le chemin pour celui-ci me semble assez inoffensif.

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); Ssortingng path = servletConfig.getServletContext().getRealPath("/WEB-INF") 

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

Je ne voudrais pas le stocker dans le dossier de l’application, car cela remplacerait la configuration avec 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 utilisateurs (l’utilisateur qui exécute Tomcat).

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, la structure Spring vous permet d’ utiliser des fichiers de configuration XML (ou des 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 dans le système de fichiers, ou même en mémoire. Si vous deviez utiliser Spring pour cela, l’emplacement le plus simple pour stocker le fichier de configuration se trouve dans votre répertoire WEB-INF, puis utilisez la classe ClassPathXmlApplicationContext de Spring pour accéder à votre fichier de configuration.

Mais encore une fois, tout dépend de la manière dont vous prévoyez 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 des configs pour résider dans WEB-INF / classes.