apache下commons有一个configeration包,对于做配置很方便,尤其是实时热配置。可以自动监测到配置文件的更改而reload配置文件。在项目中使用所以进行了一下封装。
java 代码
- public class DefaultRealTimeXMLConfiger {
- private static Log logger = LogFactory.getLog(DefaultRealTimeXMLConfiger.class);
- private String fileName;
- private long reloadPeriod;
- private XMLConfiguration config;
- public void init()
- {
- String filePath = GlobalConfigerImpl.getConfDir()+"/"+fileName;
- logger.debug("will config with XML file["+filePath+"]");
- File file = new File(filePath);
- if (!file.exists() || !file.isFile()) {
- logger.error(" can't find file[" + filePath + "]");
- throw new IllegalArgumentException("config error! can't find file[" + filePath + "]");
- }
- this.init(file);
- }
- public void init(File file) {
- try {
- config = new XMLConfiguration(file);
- FileChangedReloadingStrategy fs = new FileChangedReloadingStrategy();
- fs.setConfiguration(config);
- if(this.reloadPeriod>0)
- {
- fs.setRefreshDelay(this.reloadPeriod);
- }
- config.setReloadingStrategy(fs);
- } catch (ConfigurationException e) {
- logger.error("error! configer error["+file.getPath()+"]");
- logger.error(e);
- e.printStackTrace();
- }
- }
- public Object getProperty(String name) {
- Object s = this.config.getProperty(name);
- return s;
- }
- public String getString(String name) {
- Object s = this.config.getProperty(name);
- String result = null;
- if (s != null)
- result = (String) s;
- return result;
- }
- public String[] getStringArray(String name) {
- String[] target = this.config.getStringArray(name);
- return target;
- }
- /**
- * @return Returns the fileName.
- */
- public String getFileName() {
- return fileName;
- }
- /**
- * @param fileName The fileName to set.
- */
- public void setFileName(String fileName) {
- this.fileName = fileName;
- }
- /**
- * @return Returns the reloadPeriod.
- */
- public long getReloadPeriod() {
- return reloadPeriod;
- }
- /**
- * @param reloadPeriod The reloadPeriod to set.
- */
- public void setReloadPeriod(long reloadPeriod) {
- this.reloadPeriod = reloadPeriod;
- }
- }