避免重启你的应用程序 一

原创 2005年05月07日 22:52:00

转自: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原理,以及举出一个例子来说明如何避免重启应用程序 

避免重启你的应用程序

在开发测试阶段,某个功能模块出错或者功能需求改变,这时候程序员通常会修改源代码,然后重新编译,停止应用程序,重起应用程序。然后检测修改得功能是否正确,是否满足需求。很好,这一切在开发测试阶段都没有问题...
  • njchenyi
  • njchenyi
  • 2005年05月07日 20:22
  • 1135

避免重启你的应用程序 二

三:如果更新的功能包括应用逻辑,也就是class改变了,那就稍微麻烦点,你需要了解ClassLoader的原理。使用你定制的ClassLoader重新Load 已经编译好的class,就好比你重启应用...
  • quanjizhu
  • quanjizhu
  • 2005年05月08日 23:54
  • 1039

避免重启你的应用

在开发测试阶段,某个功能模块出错或者功能需求改变,这时候程序员通常会修改源代码,然后重新编译,停止应用程序,重起应用程序。然后检测修改得功能是否正确,是否满足需求。很好,这一切在开发测试阶段都没有问题...
  • wangsheng1028
  • wangsheng1028
  • 2005年05月20日 22:08
  • 741

windows系统下,实用cmd启动你的应用程序,还你一个干净的桌面

第一步:把你的启动程序的路径添加到环境变量path中: win10:打开步骤:“计算机”——>右键——>"属性"——>"高级系统设置"——>"环境变量"——>"系统环境"——>"path"——>"编辑...
  • u010642308
  • u010642308
  • 2017年12月08日 17:32
  • 114

你的电脑遇到问题,需要重新启动的解决思路

有时候电脑会出现问题,提示“你的电脑遇到问题,需要重新启动,我们只收集某些错误信息,然后为你重新启动。”其实出现这样的问题也是比较头痛的问题,系统出问题一般就是两个原因引起的,一、软件,二、硬件。 ...
  • hhxy_wlzx
  • hhxy_wlzx
  • 2017年12月26日 16:17
  • 242

第 0006 题:你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词。

偷懒一下,遍历目录就不写了,毕竟不爱写日记。 忽略的词严格来说应该有个词库,目前用不到就先不研究了。import osos.chdir('C:/workspace')def count_words(...
  • no_giveup
  • no_giveup
  • 2016年05月11日 00:42
  • 635

Python Show-Me-the-Code 第 0006 题 最重要的词

第 0006 题:你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词。 思路:切换到目标目录,然后遍历该目录下的txt文件,用...
  • huangxiongbiao
  • huangxiongbiao
  • 2015年04月21日 17:13
  • 1402

Python练习册 第 0006 题:你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词。

笔者最近初接触Python语言,在做一些简单的刷题练习。 第 0006 题:你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词。 ...
  • Jacky_chenjp
  • Jacky_chenjp
  • 2016年08月21日 17:17
  • 3334

<将来的你一定会感谢现在拼命的自己>读书随笔

书名就很励志:(我之所以这么努力,是不想在年华老去之后鄙视自己) 第一章:心中有了方向,才不会一路跌跌撞撞.(人生有主见,青春不迷茫) 整篇都再说做事要有方向,人生要有规划,里面也将了许多的故事,...
  • xushuai5700
  • xushuai5700
  • 2015年07月21日 21:13
  • 1500

App运行时发生OOM的原因你知道几种?应该如何避免?

App运行时发生OOM的原因你知道几种?应该如何避免? 1.资源对象用完没有关闭,造成内存泄漏。避免:对于资源性对象,在try catch finally中将资源对象放在finally中进行回收处理...
  • zyx520ytt
  • zyx520ytt
  • 2017年07月26日 16:31
  • 515
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:避免重启你的应用程序 一
举报原因:
原因补充:

(最多只允许输入30个字)