Quelles sont les pratiques acceptées pour créer un déploiement Tomcat qui lit les paramètres de configuration à partir d'un fichier de propriétés?
Ce serait bien de pouvoir livrer un fichier WAR et de spécifier que le client n'a qu'à créer ou éditer un fichier de propriétés dans un répertoire spécifique. Est-ce une façon quelque peu régulière de faire les choses? Existe-t-il une meilleure approche que celle-ci?
Nous distribuons souvent des applications Web en fournissant un fichier WAR et un fichier XML de contexte, qui sont placés dans votre Tomcat/conf/Catalina/localhost
et peut charger la webapp depuis n'importe quel chemin. Il existe un document de référence ici . Cela offre les avantages suivants:
Si vous voulez vraiment un fichier de propriétés, vous pouvez définir un paramètre dans le fichier XML de contexte pointant vers votre fichier de propriétés, lire le paramètre dans un ServletContextListener puis lire dans le fichier de propriétés.
La façon dont nous gérons cela:
C'est un peu plus de travail initial que de simplement modifier directement les informations de connexion context.xml, mais avec le temps, cela devrait porter ses fruits. Un serveur de développement serait configuré avec ses GlobalNamingResources pointant vers le développement, et un serveur de test pointant pour tester etc. Ensuite, le même fichier WAR peut être copié sur chaque serveur sans rien éditer.
Ce n'est pas en utilisant des fichiers de propriétés, mais je pense que cela atteint le même objectif. Permettre à un utilisateur/client de configurer les informations de connexion à la base de données.
Exemple de GlobalNamingResource:
<Resource name="jdbc/dbconnection" auth="Container"
type="javax.sql.DataSource" driverClassName="Oracle.jdbc.driver.OracleDriver"
url="jdbc:Oracle:thin:@127.0.0.1:1546:SID"
username="scott" password="tiger" maxActive="8" maxIdle="4"
validationQuery="select 1 from dual"
testOnBorrow="true"/>
Exemple de context.xml dans le fichier war:
<Context path="/MyWebApp" docBase="MyWebApp" debug="5" reloadable="true">
<ResourceLink name="jdbc/dbconnection" global="jdbc/dbconnection"
type="javax.sql.DataSource"/>
</Context>
Il est recommandé de stocker la configuration hors de la zone de guerre. Dans notre WAR, nous avons un emplacement par défaut pour rechercher le fichier de propriétés. Si la valeur par défaut ne fonctionne pas, vous pouvez spécifier l'emplacement via un paramètre JVM ou un paramètre de contexte défini dans un fragment de contexte dans le répertoire conf/Catalina/[Host]. Par exemple,
<Context docBase="/server/app.war"
swallowOutput="true" unpackWAR="false" useNaming="false">
<Parameter name="config-file" value="/config/db.properties" override="true" />
</Context>