避免重启你的应用程序 一
来源:互联网 发布:淘宝图片实拍保护 编辑:程序博客网 时间:2024/06/08 05:49
转自:javaresearch.org
在开发测试阶段,某个功能模块出错或者功能需求改变,这时候程序员通常会修改源代码,然后重新编译,停止应用程序,重起应用程序。然后检测修改得功能是否正确,是否满足需求。很好,这一切在开发测试阶段都没有问题,无可厚非。不过到了应用正式上线就出现麻烦了。重启应用会导致系统不可用,或者导致用户请求、响应丢失。甚至有的系统本生就要求为系统动态添加功能,在没有为你的应用添加防止重启动的策略前,通常能做的是到凌晨2点趁用户少的时候重启你的应用或者是暂时切换到备份系统。
如果你的系统也遇到过或者将不可避免的遇到这样的问题,那在这篇文章里,几个解决办法可以供你选择使用。
一:在启动前,保存未被处理的请求和未发给用户的响应。较好的方式是将接收请求,发送响应的模块与你处理应用逻辑的模块分开设计。如现在的web服务器,可以在你重新部署(redploy)的时候暂把用户的请求保存到队列,等到部署成功后在提交给处理逻辑的模块。又如,接收请求,发送响应的模块是不同的应用。与应用逻辑模块之间通过文件(把请求序列化成一个文件)等方式交换数据,这样在你的逻辑应用重启后,仍然可以继续读取请求
二:如果更新的功能是纯数据的,那么,采用动态配置,避免重启动。比如,一个web系统,提供reloadConfig界面,重新从配置文件里读取数据。一个java应用程序,你可以在你的应用程序里启动一个检测线程,检测文件是否被改变,如果改变,则自动重新转载配置。如下例子:
public ConfigChecker extends Thread
{
SystemManager sm = null;
long time ;
public ConfigChecker(SystemManager sm) throws ApplicationException
{
this.sm = sm;
time = getConfigFileTime();
}
pulblic void run()
{
while(!interrupted())
{
try
{
long newTime = getConfigFileTime();
if(newTime!=time)
{
time = newTime;
//重新装载配置
sm.reloadConfig();
}
Thread.sleep(1000*3)
}
catch(Exception ex)
{
return ;
}
}
}
public long getConfigFileTime() throws ApplicationException
{
try
{
File f = new File(sm.getConfigFile());
return f.lastModified()
}
catch(IOException ex)
{
throw new ApplicationException(ex.getMessage())
}
}
}
这种方式适合你要动态改变的是纯数据,它要求你应用中的数据不能写死在代码里,而是通过文件配置。通过重新从配置文件里读取数据避免重启动
三:如果更新的功能包括应用逻辑,也就是class改变了,那就稍微麻烦点,你需要了解ClassLoader的原理。使用你定制的ClassLoader重新Load 已经编译好的class,就好比你重启应用一样。下面将简单介绍ClassLoader原理,以及举出一个例子来说明如何避免重启应用程序
- 避免重启你的应用程序 一
- 避免重启你的应用程序
- 避免重启你的应用程序 二
- 避免重启你的应用
- 教你怎么避免重启你的应用程式 web ReLoadConfig ReLoadInterval contextConfigLocation
- 重启电脑的应用程序
- 关于应用程序的重启
- 关于应用程序的重启
- 利用自定义的异常处理重起你的应用程序
- 重启应用程序比较有效的方法
- 应用程序的重定向
- 避免在一台机器上同时运行同一应用程序的多个实例。
- adb 重启应用程序
- C# 重启应用程序
- 怎么解决tomcat修改路径,重启tomcat的时候怎么避免多次重启
- 让你的应用程序不再对的改动“感冒”(一)
- 安装时避免重起的方法
- 如何避免重构带来的危险
- DATA IMPORT & EXPORT
- 无题
- Win XP中的十八个秘密武器
- Where's me,Do you kown that?
- 我的第一个IC Layout:MUX2
- 避免重启你的应用程序 一
- 游戏学院要反扑了!
- 近日关注:SQL Server 2000 SP4发布
- 引用变量与把参数传递给方法
- Notes中货币类型格式化输出
- rs.open sql,conn,1,1全接触
- 静态不是一个很好的名字
- 工作与计划
- 冲刺软考-为自己加油