开发者

java update properties file run time

开发者 https://www.devze.com 2022-12-10 11:30 出处:网络
i am writing standalone java app for production monitoring. once it starts running the api is configured for default values which is set in .properties file. in running state the api\'s configuration

i am writing standalone java app for production monitoring. once it starts running the api is configured for default values which is set in .properties file. in running state the api's configuration can be changed and the .properties file should be updated accordingly. is there a way to achieve this ? or are there any other approaches to开发者_StackOverflow implement this ?

Thanks in advance


The Java Properties class (api here) specifies "load" and "store" methods which should do exactly that. Use FileInputStream and FileOutputStream to specify the file to save it into.


You could use a very simple approach based on the java.util.Properties class which has indeed a load and store methods that you can use in conjunction with a FileInputStream and FileOutputStream:

But actually, I'd recommend to use an existing configuration library like Commons Configuration (amongst others). Check the Properties Howto to see how to load, save and automatically reload a properties file using its API.


I completely agree that Apache Commons Configuration API is really good choice.

This example update properties at runtime

File propertiesFile = new File(getClass().getClassLoader().getResource(fileName).getFile());        
PropertiesConfiguration config = new PropertiesConfiguration(propertiesFile);           
config.setProperty("hibernate.show_sql", "true");
config.save();

From the post how to update properties file in Java

Hope this help!


java.util.Properties doesn't provide runtime reloading out-of-the-box as far as I know. Commons Configuration provides support for reloading configuration at runtime. The reload strategy can be configured by setting a ReloadingStrategy on the PropertiesConfiguration object. It also offers various other useful utilities for making your application configurable.


In addition to the load and store method of the Properties class, you can also use the Apache Commons Configuration library, which provides functions to easily manipulate configuration files (and not only .properties files).


Apache common configuration API provided different strategies to reload property files at run time. FileChangedReloadingStrategy is one of them. Refer this link to see an example for property file reloading at run time using FileChangedReloadingStrategy.


Try this:

// Write in property file at runtime

public void setValue(String key, String value) {
    Properties props = new Properties();
     String path = directoryPath+ "/src/test/resources/runTime.properties";
    File f = new File(path);
    try {
        final FileInputStream configStream = new FileInputStream(f);
        props.load(configStream);
        configStream.close();
        props.setProperty(key, value);
        final FileOutputStream output = new FileOutputStream(f);
        props.store(output, "");
        output.close();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

// Read same file

 public String getValue(String key) {
        String value = null;
        try {
            Properties prop = new Properties();
            File f = new File(directoryPath+"/src/test/resources/runTime.properties");
            if (f.exists()) {
                prop.load(new FileInputStream(f));
                value = prop.getProperty(key);
            }
        } catch (Exception e) {
            System.out.println("Failed to read from runTime.properties");
        }
        return value;
    }
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号