web-dev-qa-db-fra.com

Confus à propos de Java

J'ai un projet simple Java avec la structure:

package com.abc: a.Java b.Java c.properties

J'ai des paramètres de configuration de base de données configurés dans le fichier c.properties. Dans a.Java et b.Java, je charge le fichier de propriétés en utilisant:

Properties p = new Properties();
InputStream in = this.getClass().getResourceAsStream("c.properties");
p.load(in);

Cela fonctionne bien. Mais la question principale est, une fois que j'ai préparé le fichier exécutable en exportant ce code, le fichier de propriétés est également conditionné dans le fichier jar. Si quelqu'un d'autre souhaite modifier le fichier de propriétés pour une configuration de base de données différente, comment peut-il le faire? Dois-je stocker le fichier de propriétés dans un emplacement fixe sur la machine locale. par exemple. "c: /". Donnez ensuite le pot avec le fichier de propriétés à l'autre personne. Ensuite, il doit copier le fichier de propriétés dans C:/location? Une autre question, comment puis-je rendre cet emplacement générique pour Windows et Linux?

25
user613114

La manière typique de gérer cela consiste à charger les propriétés de base à partir de votre fichier incorporé et à permettre aux utilisateurs de l'application de spécifier un fichier supplémentaire avec des remplacements. Quelques pseudocodes:

Properties p = new Properties();
InputStream in = this.getClass().getResourceAsStream("c.properties");
p.load(in);

String externalFileName = System.getProperty("app.properties");
InputStream fin = new FileInputStream(new File(externalFileName));
p.load(fin);

Votre programme serait invoqué de la même manière:

Java -jar app.jar -Dapp.properties="/path/to/custom/app.properties"
29
Perception

Conservez d'abord les propriétés par défaut dans votre fichier de propriétés, qui est placé dans le bocal. Lorsque l'application démarre, essayez de lire un même fichier de propriétés nommé à partir d'un emplacement par défaut du système de fichiers, de préférence le dossier de départ de l'utilisateur que vous pouvez obtenir par System.getProperty("user.home");. Si le fichier existe au niveau du système de fichiers, chargez-le, s'il n'existe pas, chargez votre fichier de propriétés compressé et écrivez une copie dans le système de fichiers.

Donc, si le nom de votre fichier de propriétés est myprops.properties, initialement seul votre fichier jar le contiendra. Lorsque l'application démarre, elle vérifie si /home/xyz/myprops.properties le fichier existe. Comme il ne le fait pas, il lira le fichier de propriétés compressé et en écrira une copie dans /home/xyz/myprops.properties fichier. À partir de la prochaine fois, il lira à partir de /home/xyz/myprops.properties.

3
prajeesh kumar

Pourquoi ne pas passer l'emplacement du fichier de propriétés comme argument de ligne de commande (après un indicateur)? s'il n'est pas présent, utilisez celui par défaut dans le fichier jar.

2
msgmash.com