如何在执行时配置Java配置属性?
我有一个标准的Java应用程序,可以在启动时读取配置属性,工作正常。但是,我希望在执行时更新配置属性,而不是每次编译代码。我该怎么做呢 e、 g代码:如何在执行时配置Java配置属性?,java,Java,我有一个标准的Java应用程序,可以在启动时读取配置属性,工作正常。但是,我希望在执行时更新配置属性,而不是每次编译代码。我该怎么做呢 e、 g代码: Properties py = new Properties(); InputStream ins; String prepName = "config.properties"; ins = getClass().getClassLoader().getResourceAsStream(prepName); i
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
(您定义了计时器),谢谢你的建议,这正是我所需要的!