如何在执行时配置Java配置属性?

如何在执行时配置Java配置属性?,java,Java,我有一个标准的Java应用程序,可以在启动时读取配置属性,工作正常。但是,我希望在执行时更新配置属性,而不是每次编译代码。我该怎么做呢 e、 g代码: Properties py = new Properties(); InputStream ins; String prepName = "config.properties"; ins = getClass().getClassLoader().getResourceAsStream(prepName); i

我有一个标准的Java应用程序,可以在启动时读取配置属性,工作正常。但是,我希望在执行时更新配置属性,而不是每次编译代码。我该怎么做呢

e、 g代码:

Properties py = new Properties();
    InputStream ins;
    String prepName = "config.properties";

    ins = getClass().getClassLoader().getResourceAsStream(prepName);

    if (ins == null) {
        System.err.println("Couldn't find the file!");
        return "Error";
    }
    py.load(ins);

    String message = py.getProperty("msg");
resources/config.properties

msg=testMessage
如果我想动态更改消息,我将如何做?

您可以在运行时使用更改值

py.setProperty("msg", "newValue");
利奥评论中提到的内容看起来很有趣。我在Java7之前使用了一个Properties对象和一个worker线程,每15秒(大约)检查一次文件修改时间戳。如果文件的时间戳更改,请从文件系统重新加载Properties对象

比如:

Properties py = new Properties();
long lastModMillis = 0L;
long modMillis = file.lastModified() // to get the file modification time

if (modMillis != lastModMillis)
{
    // reload data
    FileInputStream fis = ... 
    py.clear();
    py.load(fis);
    lastModMillis = modMillis;
}
(不包括辅助线程代码)


一定要考虑如何同步事物,这样当工作者线程在文件更改上重新加载对象时,试图读取数据的线程不会发生冲突。p> 您也可以使用System.setProerty(字符串键,字符串值)和System.getProerty(字符串键)来设置所有需要执行System.setProerties(py)的项目。不确定我是否理解了您的问题,但是如果您希望应用程序观看属性文件,并且如果您使用的是java 7,您可以尝试类似这样的操作-@Leo,谢谢您的参考,除了Java6,这正是我所需要的。不过,David已经提出了解决方案。evanwong,感谢您的及时回复。但是,我要做的是更新config.properties文件,并希望应用程序拾取新数据。使用.properties方法也可以吗?@RajK+1更新文件后,您的程序必须读取它(可能再次)@RajK,一种方法是将

py
置于某个共享状态,并有一个(可能在单独的线程中)在每分钟刷新
py
(您定义了计时器),谢谢你的建议,这正是我所需要的!