利用 Commons Configuration 自动加载修改后的配置文件

红薯 发布于 2009/05/12 13:42
阅读 4K+
收藏 7

在《Apache Commons Configuration使用入门》一文中已经向大家介绍了Commons Configuration的简 单使用,因为比较简单,相信大家都已掌握。今天向大家介绍一下它的“敏感话题”,起名“敏感话题”多少有点炒作的嫌疑,这个功能的英文原意是 Automatic Reloading,自动重新加载。意思是说,当配置文件的内容发生改变了的时候,Commons Configuration能自 动重新读取配置文件的内容。

相信大家在很多项目中已经见过类似的功能,比如说有时候我们修改Web项目的配置文件web.xml,Tomcat会自动重新启动我们的项目。 Tomcat是怎么做到的呢,其实如果使用Commons Configuration的话,简单的很,只需要在原来的基础上再添加一句代码就够了:
config.setReloadingStrategy(new FileChangedReloadingStrategy());

下面我们编写一个Web项目测试一下这个功能,当然这个功能不是只能应用于Web项目。之所以选择Web项目,个人觉得这样做相对比较简单一些。
首先,创建一个Web项目:
Project name :CommonConfigurationAutomaticReloading
Web-root folder : WebRoot
Web Context-root :/ccar
然后,参考《Apache Commons Configuration使用入门》添加必要的包到项目的lib目录下,并添加到构建路径中,并把AppConfig.xml文件拷贝到项目的WEB-INF下。
接下来添加一个Servlet:
以下是web.xml中关于Servlet的配置,
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>servlets.TestServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
以下是Servlet的Java源代码,
package servlets;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;

public class TestServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext application = this.getServletContext();
XMLConfiguration config = (XMLConfiguration)application.getAttribute("appConfig");

String btime = config.getString("应用程序配置参数.考勤时间.上班时间");
double basicm = config.getDouble("应用程序配置参数.个人所得税起征额");

System.out.println("上班时间:" + btime);
System.out.println("个人所得税起征额:" + basicm + "元");
}

@Override
public void init() throws ServletException {
String path = this.getServletContext().getRealPath("/");
String filename = path + "/WEB-INF/AppConfig.xml";

try {
XMLConfiguration config = new XMLConfiguration(filename);
config.setReloadingStrategy(new FileChangedReloadingStrategy());

System.out.println("成功加载:" + filename);

ServletContext application = this.getServletContext();
application.setAttribute("appConfig", config);
} catch (ConfigurationException e) {
e.printStackTrace();
}
}
}

最后,启动Tomcat并发布项目,控制台应该显示如下信息(类似):
成功加载:F:\jdev\apache-tomcat-6.0.14\webapps\ccar\/WEB-INF/AppConfig.xml
然后,打开浏览器,在地址栏里输入:http://localhost:8080/ccar/TestServlet并回车,控制台显示如下:

上班时间:08:00:00
个人所得税起征额:1000.0元

再修改AppConfig.xml的内容:
<个人所得税起征额>1000</个人所得税起征额> 
= 〉
<个人所得税起征额>2000</个人所得税起征额>

保存之后,控制台显示如下信息:
2007-12-26 9:09:47 org.apache.commons.configuration.AbstractFileConfiguration reload
信息: Reloading configuration. URL is file:/F:/jdev/apache-tomcat-6.0.14/webapps/ccar/WEB-INF/AppConfig.xml

回到浏览器,刷新一下,控制台显示如下:
上班时间:08:00:00
个人所得税起征额:2000.0元

测试完毕,可见已经达到了我们的期望。为了不长篇大论,在这里只是简单的介绍一下怎么做,其中很多知识点在课堂上都已反复讲过,所以就不在这里罗嗦了。如果有什么问题欢迎积极讨论。

加载中
0
wangxiang243
wangxiang243
不错 很实用
0
Judeoyzhu
Judeoyzhu
确实实用!
返回顶部
顶部