如果在命令行参数指定的覆盖属性文件值(Overwrite property file values

2019-10-17 20:43发布

我的工作中,我需要阅读一切从项目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"

下面是我的程序 -

private static Properties prop = new Properties();

private static int noOfThreads;
private static int noOfTasks;
private static int startRange;
private static String location;
private static List<String> tableNames = new ArrayList<String>();

public static void main(String[] args) {

        location = args[0];

        try {

            readPropertyFiles();

        } catch (Exception e) {
            LOG.error("Threw a Exception in" + CNAME + e);
        }
    }

    private static void readPropertyFiles() throws FileNotFoundException, IOException {

        prop.load(new FileInputStream(location));

        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) {

            //Other Code
        }
    }

问题陈述:-

现在我所要做的是-从命令提示符想,如果我传递其他参数如NUMBER_OF_THREADS, NUMBER_OF_TASKS, ID_START_RANGE, TABLES连同config.properties file ,那么它应该覆盖的值config.properties file 。 所以,如果我跑我的程序像这个 -

java -jar Test.jar "C:\\test\\config.properties" t:10 n:100 i:2 TABLES:TABLE1 TABLES:TABLE2 TABLES:TABLE3

然后在我的程序 -

noOfThreads should be 10 instead of 100
noOfTasks should be 100 instead of 10000
startRange should be 2 instead of 1
tableNames should have three table TABLE1, TABLE2, TABLE3 instead of TABLE1 and TABLE2.

上面的格式,如果我需要覆盖config.property文件我将随之而来。

但是,如果我运行一个像这个 -

java -jar Test.jar "C:\\test\\config.properties"

那么它应该读一切从config.properties file

总的来说,我想覆盖config.properties file ,如果我传递的参数在命令行沿config.property文件的位置。

谁能给我提供这样的情况的一个例子(干净的方式)?

Answer 1:

您可以手动将它们合并,但你需要在命令行选项情况下,你怎么知道,表3应该被添加到表名数组,而不是10,100和2?

如果要更改命令行,如下所示:

java -jar Test.jar "C:\\test\\config.properties" 10 100 2 TABLES:TABLE1 TABLES:TABLE2 TABLES:TABLE3

然后,你可以通过在你的main方法的命令行参数周期你做了之后的属性文件的读取,并插入或添加属性条目。



文章来源: Overwrite property file values if specified in the command line arguments