我的Java路上那些事兒

          快樂(lè)成長(zhǎng)
          posts - 110, comments - 101, trackbacks - 0, articles - 7
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          用java寫服務(wù)程序時(shí)經(jīng)常會(huì)涉及到監(jiān)控某些配置文件,當(dāng)配置文件發(fā)生變化時(shí)實(shí)時(shí)重新加載該文件的內(nèi)容到內(nèi)存.
          實(shí)際上log4j里有現(xiàn)成的類FileWatchdog做了類似的工作.我們只需繼承它,然后重寫它的一些方法就可以了.
           
             /**使用log4j的監(jiān)控狗 */
              
          public class IPAccessFileWatchdog extends FileWatchdog {
                  
          public IPAccessFileWatchdog(String filename){
                      
          super(filename);
                  }


                  
          public void doOnChange() {
                      List
          <String> list = IPAccessController.this.loadIPRule(new File(this.filename));
                      
          if (list != null{
                          IPAccessController.
          this.ipRule = list.toArray(new String[list.size()]);
                      }
           else {
                          IPAccessController.
          this.ipRule = null;
                      }

                      LogLog.warn(
          "ip access config load completed from file:" + filename);
                  }

              }

          }


          FileWatchdog的代碼也很簡(jiǎn)單,其實(shí)就是起一個(gè)線程,每隔固定的時(shí)間掃描一次監(jiān)控的文件.我把代碼也貼出來(lái):'


          // Contributors:  Mathias Bogaert

          package org.apache.log4j.helpers;

          import java.io.File;
          import org.apache.log4j.helpers.LogLog;

          public abstract class FileWatchdog extends Thread {

            
            
          static final public long DEFAULT_DELAY = 60000
            
            
          protected String filename;
            
            
            
          protected long delay = DEFAULT_DELAY; 
            
            File file;
            
          long lastModif = 0
            
          boolean warnedAlready = false;
            
          boolean interrupted = false;

            
          protected
            FileWatchdog(String filename) 
          {
             
          this.filename = filename;
             file 
          = new File(filename);
             setDaemon(
          true);
             checkAndConfigure();
            }


            
            
          public
            
          void setDelay(long delay) {
             
          this.delay = delay;
            }


            
          abstract 
            
          protected 
            
          void doOnChange();

            
          protected
            
          void checkAndConfigure() {
             
          boolean fileExists;
             
          try {
              fileExists 
          = file.exists();
             }
           catch(SecurityException  e) {
              LogLog.warn(
          "Was not allowed to read check file existance, file:["+
           filename
          +"].");
              interrupted 
          = true// there is no point in continuing
              return;
             }


             
          if(fileExists) {
              
          long l = file.lastModified(); // this can also throw a SecurityException
              if(l > lastModif) {      // however, if we reached this point this
          lastModif = l;        // is very unlikely.
          doOnChange();
          warnedAlready 
          = false;
              }

             }
           else {
              
          if(!warnedAlready) {
          LogLog.debug(
          "["+filename+"] does not exist.");
          warnedAlready 
          = true;
              }

             }

            }


            
          public
            
          void run() {   
             
          while(!interrupted) {
              
          try {
            Thread.sleep(delay);
              }
           catch(InterruptedException e) {
          // no interruption expected
              }

              checkAndConfigure();
             }

            }

          }



          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 宁乡县| 广州市| 昆明市| 夏邑县| 拉孜县| 金坛市| 禄丰县| 南通市| 梅州市| 兴安县| 阳城县| 洞头县| 阳谷县| 迭部县| 怀安县| 周宁县| 临高县| 孟州市| 泰安市| 望江县| 高密市| 安远县| 客服| 汪清县| 新晃| 吴堡县| 和平县| 柏乡县| 和政县| 凤翔县| 横峰县| 通化市| 平果县| 陵水| 平武县| 深水埗区| 颍上县| 内黄县| 文昌市| 肇庆市| 古蔺县|