config.properties
如果命令行不包含除 config.properties 文件位置之外的任何参数,我有一个程序将从文件中读取所有内容。下面是我的 config.properties 文件-
NUMBER_OF_THREADS: 100
NUMBER_OF_TASKS: 10000
ID_START_RANGE: 1
TABLES: TABLE1,TABLE2
如果我像这样从命令提示符运行我的程序-
java -jar Test.jar "C:\\test\\config.properties"
config.properties
它应该从文件中读取所有四个属性。但是假设如果我像这样运行我的程序-
java -jar Test.jar "C:\\test\\config.properties" 10 100 2 TABLE1 TABLE2 TABLE3
然后它应该从参数中读取所有属性并覆盖 config.properties 文件中的属性。
下面是我的代码,在这种情况下工作正常 -
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
}
}
问题陈述:-
现在我要做的是-假设是否有人正在运行这样的程序
java -jar Test.jar "C:\\test\\config.properties" 10
然后在我的程序中,它应该只覆盖noOfThreads
-
noOfThreads should be 10 instead of 100
假设那个人正在运行这样的程序——
java -jar Test.jar "C:\\test\\config.properties" 10 100
然后在我的程序中,它应该覆盖noOfThreads
并且noOfTasks
只-
noOfThreads should be 10 instead of 100
noOfTasks should be 100 instead of 10000
以及可能的其他用例。
谁能建议我如何实现这种情况?谢谢您的帮助