Écraser le fichier de propriétés si la valeur de ligne de commande est présent
J'ai un programme qui va lire tout de config.properties
fichier si la ligne de commande ne contient pas tous les arguments en dehors de config.propriétés de l'emplacement du fichier. Ci-dessous ma config.fichier de propriétés-
NUMBER_OF_THREADS: 100
NUMBER_OF_TASKS: 10000
ID_START_RANGE: 1
TABLES: TABLE1,TABLE2
Si j'exécute mon programme à partir de l'invite de commande comme ceci-
java -jar Test.jar "C:\\test\\config.properties"
Il faut lire tous les quatre propriétés de la config.properties
fichier. Mais supposons que si je suis en cours d'exécution de mon programme de ce genre-
java -jar Test.jar "C:\\test\\config.properties" 10 100 2 TABLE1 TABLE2 TABLE3
ensuite, il faut lire toutes les propriétés de l'argumentation et de remplacer les propriétés de config.fichier de propriétés.
Ci-dessous mon code qui fonctionne très bien dans ce scénario-
public static void main(String[] args) {
try {
readPropertyFiles(args);
} catch (Exception e) {
LOG.error("Threw a Exception in" + CNAME + e);
}
}
private static void readPropertyFiles(String[] args) throws FileNotFoundException, IOException {
location = args[0];
prop.load(new FileInputStream(location));
if(args.length >= 1) {
noOfThreads = Integer.parseInt(args[1]);
noOfTasks = Integer.parseInt(args[2]);
startRange = Integer.parseInt(args[3]);
tableName = new String[args.length - 4];
for (int i = 0; i < tableName.length; i++) {
tableName[i] = args[i + 4];
tableNames.add(tableName[i]);
}
} else {
noOfThreads = Integer.parseInt(prop.getProperty("NUMBER_OF_THREADS").trim());
noOfTasks = Integer.parseInt(prop.getProperty("NUMBER_OF_TASKS").trim());
startRange = Integer.parseInt(prop.getProperty("ID_START_RANGE").trim());
tableNames = Arrays.asList(prop.getProperty("TABLES").trim().split(","));
}
for (String arg : tableNames) {
//Some Other Code
}
}
Énoncé Du Problème:-
Maintenant, ce que je suis en train de faire est - Supposons que si une personne est en cours d'exécution du programme comme ceci
java -jar Test.jar "C:\\test\\config.properties" 10
puis dans mon programme, il doit remplacer noOfThreads
seulement-
noOfThreads should be 10 instead of 100
Et supposons que si cette personne est en cours d'exécution du programme comme celui-
java -jar Test.jar "C:\\test\\config.properties" 10 100
puis dans mon programme, il doit remplacer noOfThreads
et noOfTasks
seulement-
noOfThreads should be 10 instead of 100
noOfTasks should be 100 instead of 10000
Et éventuellement d'autres cas d'utilisation.
Quelqu'un peut-il me suggérer des moyens d'atteindre ce scénario? Merci pour l'aide
OriginalL'auteur arsenal | 2013-03-18
Vous devez vous connecter pour publier un commentaire.
Créer une boucle, à la place.
TechGeeky: j'ai remplacé le diamant opérateurs, de sorte que vous pouvez l'utiliser avec la version 6 de Java.
OriginalL'auteur Adeel Ansari
Lors de la définition d'entrée de ligne de commande comme suit
java -jar Test.jar "C:\\test\\config.properties" 10 100
Cela signifie que l'on doit toujours fournir
noOfThreads
pour remplacernoOfTasks
.Pour résoudre ce problème, vous pouvez spécifier ces que les propriétés du système sur la ligne de commande avec l'emplacement du fichier qui d'autres sages a un emplacement par défaut. Par exemple: -
java -jar -Dconfig.file.location="C:\\test\\config.properties" -DNUMBER_OF_THREADS=10 Test.jar
Ensuite.
Properties
.System.getProperty()
.De cette façon, n'importe comment beaucoup de propriétés vous introduisez votre code sera toujours de même.
Vous pouvez aller plus loin et d'encapsuler le tout dans un
PropertyUtil
qui fournissent aussi des méthodes de l'utilitaire, commegetIntProperty()
,getStringProperty()
etc.Exemples.
config.propriétés
Pour remplacer
NUMBER_OF_THREADS
.java -jar -Dconfig.file.location="C:\\test\\config.properties" -DNUMBER_OF_THREADS=10 Test.jar
Court exemple pour lire "NUMBER_OF_THREADS" comme int.
Là vous allez.
+1 pour l'option-D seul. Btw, votre getIntProperty() semble cassé. Donc, je l'ai corrigé. Vous êtes invités à revenir, si vous pensez qu'il a été vraiment bon.
Merci pour le modifier!
OriginalL'auteur sgp15
Alors que par vos arguments de ligne de commande définir les propriétés individuelles :
Ce n'écrase pas la configuration existant.fichier de propriétés.
OriginalL'auteur Xavier DSouza