这是一种享受.需要Java 7,Apache commons日志记录,Apache commons lang(v2.6)和Apache commons配置:
package corejava.reloadTest;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;
public class MyApplicationProperties {
private static PropertiesConfiguration configuration = null;
static {
try {
configuration = new PropertiesConfiguration("test.properties");
} catch (ConfigurationException e) {
e.printStackTrace();
}
configuration.setReloadingStrategy(new FileChangedReloadingStrategy());
}
public static synchronized String getProperty(final String key) {
return (String) configuration.getProperty(key);
}
}
并测试它:
package corejava.reloadTest;
public class TestReloading {
public static void main(String[] args) {
while (true) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(MyApplicationProperties.getProperty("key"));
}
}
}
更改test.properties时的输出是这样的(test.props的原始内容是key = value,后来更改为key = value1 mid-program execution):
value
value
value
value
value
Jan 17, 2015 2:05:26 PM org.apache.commons.configuration.PropertiesConfiguration reload
INFO: Reloading configuration. URL is file:/D:/tools/workspace /AutoReloadConfigUsingApacheCommons/resources/test.properties
value1
value1
value1
你也可以考虑官方Spring框架参考文档Refreshable beans,使用像Groovy这样的DSL.